###############首先###############
signed int 有符号整型
unsigned int 无符号整型
int就是signed int,书上写是用[signed] int表示signed可以省略
2^31=2147483648
2^31-1=2147483647
2^32=4294967296
2^32-1=4294967295
###############对有符号整型###############
范围从-2147483648到-1=2^31个=2147483648个
对二进制用补码表示,最高位1开头:
1000 0000 0000 0000 0000 0000 0000 0000 -> -2147483648
1000 0000 0000 0000 0000 0000 0000 0001 -> -2147483647
...
1111 1111 1111 1111 1111 1111 1111 1110 -> -2
1111 1111 1111 1111 1111 1111 1111 1111 -> -1
范围从0到2147483647 =2^31个=2147483648个
对二进制用补码(正数原码反码补码一样)表示,最高位0开头:
0000 0000 0000 0000 0000 0000 0000 0000 -> 0
0000 0000 0000 0000 0000 0000 0000 0001 -> 1
...
0111 1111 1111 1111 1111 1111 1111 1110 -> 2147483646
0111 1111 1111 1111 1111 1111 1111 1111 -> 2147483647
###############对无符号整型###############
无符号就是最高位不表示符号位,依然作为数值位使用
范围从0到4294967295=2^32个=4294967296个
###############关于printf的打印###############
%d有符号
%u无符号
signed int i = -3; //即i=11111111111111111111111111111101(有符号数-3)
unsigned int i2 = -13;//即i=11111111111111111111111111110011(有符号数-13)
(1)
printf("i的值为%d\n", i);//把i解析为有符号整型, 输出: i的值为-3
printf("i2的值为%d\n", i2);//把i解析为有符号整型,输出:i2的值为-13
(2)
printf("i的值为%u\n", i);//把i解析为有符号整型, 输出: i的值为4294967293 (即=4294967295-2)
printf("i2的值为%u\n", i2);//把i解析为有符号整型, 输出:i2的值为4294967283 (即=4294967295-12)
对于(1)是有符号原样解析,最高位为符号位
对于(2)是无符号解析,最高位被当作了数值位
signed int 有符号整型
unsigned int 无符号整型
int就是signed int,书上写是用[signed] int表示signed可以省略
2^31=2147483648
2^31-1=2147483647
2^32=4294967296
2^32-1=4294967295
###############对有符号整型###############
范围从-2147483648到-1=2^31个=2147483648个
对二进制用补码表示,最高位1开头:
1000 0000 0000 0000 0000 0000 0000 0000 -> -2147483648
1000 0000 0000 0000 0000 0000 0000 0001 -> -2147483647
...
1111 1111 1111 1111 1111 1111 1111 1110 -> -2
1111 1111 1111 1111 1111 1111 1111 1111 -> -1
范围从0到2147483647 =2^31个=2147483648个
对二进制用补码(正数原码反码补码一样)表示,最高位0开头:
0000 0000 0000 0000 0000 0000 0000 0000 -> 0
0000 0000 0000 0000 0000 0000 0000 0001 -> 1
...
0111 1111 1111 1111 1111 1111 1111 1110 -> 2147483646
0111 1111 1111 1111 1111 1111 1111 1111 -> 2147483647
###############对无符号整型###############
无符号就是最高位不表示符号位,依然作为数值位使用
范围从0到4294967295=2^32个=4294967296个
###############关于printf的打印###############
%d有符号
%u无符号
signed int i = -3; //即i=11111111111111111111111111111101(有符号数-3)
unsigned int i2 = -13;//即i=11111111111111111111111111110011(有符号数-13)
(1)
printf("i的值为%d\n", i);//把i解析为有符号整型, 输出: i的值为-3
printf("i2的值为%d\n", i2);//把i解析为有符号整型,输出:i2的值为-13
(2)
printf("i的值为%u\n", i);//把i解析为有符号整型, 输出: i的值为4294967293 (即=4294967295-2)
printf("i2的值为%u\n", i2);//把i解析为有符号整型, 输出:i2的值为4294967283 (即=4294967295-12)
对于(1)是有符号原样解析,最高位为符号位
对于(2)是无符号解析,最高位被当作了数值位