c - 当存储一个大的正整数时,它会转换为不同的负数

标签 c

当我将一个大的正整数存储在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/

相关文章:

c - Arduino fsr 保持值(value)

c - 替代#define 以获得 C 中的灵活性

c - 试图从用户那里读取 double,出现段错误

c - 需要帮助按分隔符拆分字符串(并将分隔符保留在标记列表中)

与 if 语句中的字符串比较不起作用

c - splinter 选择排序 C

c - C 中的 SOAP 库

c - Cormen 在 C 中实现的 Heapsort 算法,无法正常工作

c - 需要帮助理解指针算术以及如何访问信息

c - 如何在 fork 的子进程期间在字符串上打印\n