C语言: C的char类型溢出问题

C语言: C的char类型溢出问题

一.程序片段

int main()

{

char a = 200;

char b = 100;

char c = 0;

c = a + b;

printf(“%d %d”, a+b,c);

return 0;

}

运行结果:

300

44

二.解释溢出

char分配的是一字节有符号整数,范围通常是 -128 到 127。

如果char类型被赋值一个超出范围的数值300,char类型的储存就会发生溢出,根据有符号整数的溢出规则,当赋给有符号类型的变量一个超过其表示范围的值时,结果是未定义的。

而溢出的数据储存有一定规则转化为范围内的数据

三.转化规则

1.300储存在char类型时,我们可以先得到300的补码:

1 0010 1100

因为char只能存储8bit,会舍弃第九位数字,得到补码

0010 1100

整数的补码,反码,原码相同,所以就直接转化为44

2. 428储存在char类型时,先得到428的补码

1 1010 1100

舍弃超出8bit的字符:

1010 1100

整形提升,用符号位填充(32位)

1111 1111 1111 1111 1111 1111 1010 1100

首位元素会被当做符号位,1首元素会被当做负值,补码取反后+1,得到原码

1000 0000 0000 0000 0000 0101 0100

则得到-84

✨ 相关推荐

小红书的东西是正品吗?为什么这么便宜?
det365在线平台

小红书的东西是正品吗?为什么这么便宜?

📅 08-02 👀 4741
关于熊猫优选的体验报告
beat365最新版体育

关于熊猫优选的体验报告

📅 08-11 👀 6315
暴雪娱乐游戏列表
det365在线平台

暴雪娱乐游戏列表

📅 07-04 👀 6511