C语言中数据的存储
在C语言中,整数类型的存储方式如下:
1. 无符号整型(unsigned int
等)
-
存储方式:直接使用二进制原码(无符号位,纯二进制值)。
-
特点:所有位都用于表示数值,范围是
0
到2^N - 1
(N
是位数)。例如,32位无符号整型的范围是0
到4294967295
。
2. 有符号整型(int
、short
、long
等)
-
存储方式:通常是补码(Two's Complement),但C标准允许实现定义其他形式(如原码或反码)。
-
补码的优势:
-
统一加减法运算,无需区分正负数。
-
0的唯一表示(避免原码中“+0”和“-0”的问题)。
-
-
C标准的规定:
-
C标准(如C11 §6.2.6.2)允许三种有符号整数表示方式:
-
原码(Sign-Magnitude):最高位为符号位,其余位为绝对值(例如,
-5
表示为10000101
)。 -
反码(One's Complement):符号位不变,其余位取反(例如,
-5
表示为11111010
)。 -
补码(Two's Complement):符号位不变,其余位取反后加1(例如,
-5
表示为11111011
)。
-
-
虽然标准允许这三种方式,但现代计算机和编译器(如GCC、Clang)几乎全部使用补码。
-
3. 总结
-
无符号整型:直接存储二进制原码。
-
有符号整型:实际实现中几乎全是补码,但C标准未强制规定(允许原码或反码,只是现实中极少见)。