- 整型提升
整型提升: 当用所占字节数小于int(4字节32bit位)类型的数据类型去定义一个整型变量,并赋整数值时,由于各数据类型储存时所占字节的不同,导致该整数在内存中存储的二进制序列需要截断后储存,当我们用%d或%u的形式将其打印出时,需要进行整形的提升,最后输出的数值与最初的赋值可能会因为二进制序列的变化发生变化。
- 具体步骤(以-1为例)
1.写出该整数的原码
-1的原码:
10000000 00000000 00000000 00000001
2. 根据原码写出补码
-1的补码:
11111111 11111111 11111111 11111111
3.截取对应数据类型表示的序列片段
char类型对应空间的序列片段即截取一个字节大小的数据(截取的片段是后八位)
11111111
4.对片段进行整型提升
(1)无符号数整型提升时空位直接补0
00000000 00000000 00000000 11111111
(2)有符号数整型提升时高位补原符号位对应的数字
11111111 11111111 11111111 11111111
5.整型提升后换成原码(因为%d识别的是二进制的原码,所以要转换成原码)
(1)unsigned char a=-1
00000000 00000000 00000000 11111111(无符号数原码=反码=补码)(即十进制的255)
%d形式输出a=225
(2)signed char a=-1
10000000 00000000 00000000 00000001 (即十进制的-1)
%d形式输出-1
- 注意%u是打印无符号数,%d打印有符号数,无符号数高位直接补0,有符号数则补原符号位的数。