Tag: 整数

传递参数使得指针来自整数

我找不到我的问题。 不断给我这些错误: “c:2:5: note: expected ‘int *’ but argument is of type ‘int'” “c:28:1: warning: passing argument 1 of ‘CountEvenNumbers’ makes pointer from integer without a cast [enabled by default]” 这是代码: 1 #include 2 int CountEvenNumbers(int numbers[], int length); 3 int main(void) 4 { 5 int length; 6 int X;int Z; int Y; int W; […]

如何修复错误代码C4146“unary减运算符应用于unsigned type.result仍未签名”?

数据类型int的最小值为-2,147,483,648。 所以,我输入了 int val = -2147483648; 但是,它有一个错误: unary minus operator applied to unsigned type.result still unsigned 我该如何解决?

计算设置的k位大于另一个整数x的最小整数?

我想计算设置恰好为k位的最小整数,即大于另一个整数x 。 例如,如果x = 1001010那么对于k=2 ,对于k=4 ,答案应该是1010000 ,答案应该是1001011 ,对于k=5 ,答案是1001111 我认为需要设置至少与整数x设置的最左位一样多的位,然后在x设置与下一个最左边设置位相邻的MSB侧位或者设置下一个最左边的设置位之间进行选择然后通过重复相同的过程来查看设置后面的位; 一直计算k中剩下的位数。 我不确定这是否是正确的方法。

通过非常数除数进行矢量化整数除法的最快方法

基于这个问题的答案/评论,我用gcc 4.9.2(MinGW64)编写了一个性能测试来估计多个整数除法的哪种方式更快,如下: #include // SSE2 static unsigned short x[8] = {0, 55, 2, 62003, 786, 5555, 123, 32111}; // Dividend __attribute__((noinline)) static void test_div_x86(unsigned i){ for(; i; –i) x[0] /= i, x[1] /= i, x[2] /= i, x[3] /= i, x[4] /= i, x[5] /= i, x[6] /= i, x[7] /= i; } __attribute__((noinline)) static […]

如何将整数转换为C中的字符?

例如,如果整数为97,则字符为’a’,或98为’b’。

在C中将符号扩展名从16位扩展到32位

我必须为16位整数做一个符号扩展,由于某种原因,它似乎没有正常工作。 谁能告诉我代码中的bug在哪里? 我已经工作了几个小时。 int signExtension(int instr) { int value = (0x0000FFFF & instr); int mask = 0x00008000; int sign = (mask & instr) >> 15; if (sign == 1) value += 0xFFFF0000; return value; } 指令(instr)是32位,在里面我有一个16位的数字。

将2个字节转换为整数

我收到一个端口号为2个字节(最低有效字节优先),我想将它转换为一个整数,以便我可以使用它。 我做了这个: char buf[2]; //Where the received bytes are char port[2]; port[0]=buf[1]; port[1]=buf[0]; int number=0; number = (*((int *)port)); 但是,有一些错误,因为我没有得到正确的端口号。 有任何想法吗?

最有效的便携式溢出检测?

可能重复: 乘数大,如何捕获溢出 接近C,C ++和D等金属语言,最有效的合理可移植方式(即使用汇编程序,虽然你可以假设两个补码运算和环绕行为)来检测无符号64位的溢出乘法上的整数?

如何判断32位int是否适合16位短路

仅使用: ! ~ & ^ | + <> 我需要找出一个带符号的32位整数是否可以表示为16位,二进制补码整数。 我的第一个想法是分离MSB 16位和LSB 16位,然后使用掩码和最后16位,所以如果它不为零,它将无法表示,然后使用该数字来检查MSB位。 我需要编写的函数示例是:fitsInShort(33000)= 0(无法表示)和fitsInShort(-32768)= 1(可以表示)

C中x64的128位算术运算

在x86上实现bignums时,显然数字大小的最有效选择是32位。 但是,您需要算术最多两倍的数字大小(即32 + 32 = 33,32 * 32 = 64,64 / 32 = 32)。 幸运的是,x86不仅提供了这一function,而且还可以从便携式C(uint64_t)访问它。 类似地,在x64上,希望使用64位数字。 这将需要128位算术(即64 + 64 = 65,64 * 64 = 128,128 / 64 = 64)。 幸运的是,x64提供了这个function。 不幸的是,它无法通过便携式C接入,但显然有人可以进入组装。 所以我的问题是它是否可从非便携式C访问.X64上的任何C编译器是否提供对此的访问,如果是,那么语法是什么? (注意,我不是在谈论128位向量,它们被严格地视为32或64位字的集合,它们之间没有进位传播,但是关于实际的128位整数运算。)