当我在c中的unsigned long int中存储一个大的正整数时,它会在不知不觉中转换为负数。
例如
a=2075000020, b=100000000,here a+b=-2119967266.
请帮助我理解。
答案 0 :(得分:3)
您无法打印无符号整数,因为它已打印符号。即使您将变量声明为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