【C语言】【数据存储】用%d打印char类型数据,猜结果是啥

题目代码如下:

#include 
int main()
{
 char a= -1;
 signed char b=-1;
 unsigned char c=-1;
 printf("a=%d,b=%d,c=%d",a,b,c);
 return 0;
}

解题关键:
1.二进制存储:原码,反码,补码 互换
2.截断
3.整型提升

1.二进制存储,截断:

-1 是个整型,存储形式应该是:
原码:1000000…00000001
反码:11111111…11111110
补码:11111111…11111111

而char类型占 1 个字节,8个 bit位,从低位发生截断:
11111111

2.整型提升,补码转原码:

注意:发生整型提升时才与变量类型有关(有无符号…)
%d 是打印十进制整型的,整型占 4 个字节
而 char 在vs中默认有符号整型,也就是 signed char

发生整型提升时
有符号的向高位加符号位
无符号的向高位补 0

此时 前两个补码:111111…111111111
第三个补码: 00000000…11111111
这是补码,写出它原码代表的数字就是要输出的值

前两个原码:10000000…00000001
第三个原码(原反补相同):00000000…11111111

所以前两个输出的都是 -1 ,第三个输出的是 255

【C语言】【数据存储】用%d打印char类型数据,猜结果是啥_第1张图片

你可能感兴趣的:(c语言,开发语言,学习方法,笔记)