当我将一个大的正整数存储在c中的unsigned long int中时,它会不知不觉地转换为负数。
例如
a=2075000020, b=100000000,here a+b=-2119967266.
请帮我理解。
最佳答案
您不能打印无符号整数,因为它打印了一个符号。即使您将变量声明为 unsigned
,一旦它位于堆栈上供 printf()
使用,它就会被解释为二进制值,按照指定的方式使用printf()
中的格式。
注意它们之间的差异以及结果。在第三个示例中,您可以看到设置了第 31 位,这是 signed long int
的符号位。
#include <stdio.h>
#include <string.h>
int main () {
unsigned long int a=2075000020, b=100000000, c;
c = a + b;
printf ("Signed %ld\n", c);
printf ("Unsigned %lu\n", c);
printf ("Hexadecimal 0x%lX\n", c);
return 0;
}
程序输出:
Signed -2119967276
Unsigned 2175000020
Hexadecimal 0x81A3DDD4
关于c - 当存储一个大的正整数时,它会转换为不同的负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29477496/