当存储大的正整数时,它将转换为不同的负数

时间:2015-04-06 18:45:22

标签: c

当我在c中的unsigned long int中存储一个大的正整数时,它会在不知不觉中转换为负数。

例如

 a=2075000020, b=100000000,here a+b=-2119967266. 

请帮助我理解。

1 个答案:

答案 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