Tag: 整数

最快的算法,可以将数字加总到N

我想在C中使用非常快的算法或代码来执行以下任务:对于任何给定的整数N,将所有数字从1加到N,而不假设N是正数。 我做了一个从1到N的求和循环,但它太慢了。

将两个64位整数乘以128位然后>>到64位的最快方法?

我需要将两个带符号的64位整数a和b相乘,然后将(128位)结果移位到带符号的64位整数。 最快的方法是什么? 我的64位整数实际上代表fmt小数位的定点数。 选择fmt使得a * b >> fmt不应该溢出,例如abs(a) < 64<<fmt和abs(b) < 2<<fmt , fmt==56将永远不会溢出64位作为最终结果将是< 128<<fmt ,因此适合int64。 我想这样做的原因是快速准确地评估forms的五次多项式((((c5*x + c4)*x + c3)*x + c2)*x + c1)*x + c0在不动点格式,每个数字都是带有fmt小数位的带符号的64位定点数。 我正在寻找实现这一目标的最有效方法。

如何测试无损双/整数转换?

我有一个双,一个int64_t。 我想知道它们是否保持完全相同的值,如果将一种类型转换为另一种类型,则不会丢失任何信息。 我目前的实施如下: int int64EqualsDouble(int64_t i, double d) { return (d >= INT64_MIN) && (d < INT64_MAX) && (round(d) == d) && (i == (int64_t)d); } 我的问题是:这个实现是否正确? 如果没有,那么什么是正确答案? 为了正确,它必须不留假阳性,不得假阴性。 一些示例输入: int64EqualsDouble(0,0.0)应该返回1 int64EqualsDouble(1,1.0)应该返回1 int64EqualsDouble(0x3FFFFFFFFFFFFFFF,(double)0x3FFFFFFFFFFFFFFF)应该返回0,因为2 ^ 62-1可以用int64_t精确表示,但不能用double表示。 int64EqualsDouble(0x4000000000000000,(double)0x4000000000000000)应返回1,因为2 ^ 62可以在int64_t和double中精确表示。 int64EqualsDouble(INT64_MAX,(double)INT64_MAX)应返回0,因为INT64_MAX不能完全表示为double int64EqualsDouble(…,1.0e100)应该返回0,因为1.0e100不能完全表示为int64_t。

bitParity – 查找整数中的奇数位数

我必须创建一个函数bitParity(int x) ,它取一个整数,如果x的位forms有一个奇数0 ,则返回1否则返回0 。 例如: bitParity(5) = 0, bitParity(7) = 1 但是,这很难,因为我只能在这个问题上使用位运算符( ! ˜ & ˆ | + <>是唯一合法的)。 这意味着,没有循环, if-then或任何类型的东西。 可以使用常量。 到目前为止,我所做的并不起作用,但我认为我应该将整数的位移16,8和4倍,并将剩余的整数进行XOR 。 有人可以提供一些建议吗? 谢谢。

是否有LARGEST_INTEGER宏或类似的东西? (C)

可能重复: 如何将变量设置为C中可能的最大数量? int的最大值 我需要在我的代码中使用最大整数值,但我不想显式写4294967295.它是在某处定义的吗?

C中1U和1之间有什么区别吗?

while ((1U << i) < nSize) { i++; } 使用1U而不是1任何特殊原因?

为什么abs(0x80000000)== 0x80000000?

我刚刚开始阅读Hacker’s Delight ,它将abs(-2 31 )定义为-2 31 。 这是为什么? 我在几个不同的系统上尝试了printf(“%x”, abs(0x80000000)) ,并且我在所有系统上都返回了0x80000000。

C Scanf突然停止读取数值

我正试图在我的Mac上运行一个简单的C程序。 它工作正常一段时间但突然scanf停止工作。 我基本上想要读取整数值并输出输入的内容。 无论我输入的整数,程序都保持输出0.我已经尝试了这里的建议,但没有任何作用。 我已尝试在终端和xcode中运行程序,但仍然没有。 有任何想法吗? #include int main(){ int numberOfElements = 0; scanf(“Number of elements: %d”,&numberOfElements); printf(“%d\n”,numberOfElements); //keeps returning 0 no matter the number I enter return 0; }

int和float的大小

我有关于整数和浮点范围的问题: 如果它们都具有相同的4字节大小,为什么它们具有不同的范围?

整数溢出的概念

int溢出如何工作。 我的意思是问如果发生溢出,整数值的最终结果是什么? 我需要在纸上理解它。 就像我给出了一个多项选择题: 11 ^ 5产生: 一个。 12 湾 14 C。 15 d。 17。 我知道答案是(b)14 ,但想知道为什么?