为什么是144,那个大佬能告诉我运算过程
1. 请解释为何下边变量 a 的值为何打印出来是 144(请写出分析过程)?#include <stdio.h>
int main()
{
unsigned char a, b, c;
b = c = 200;
a = b + c;
printf("a = %u\n", a);
return 0;
} 400-256=144???
这数据溢出的代码没有研究的价值 wp231957 发表于 2022-6-14 16:03
400-256=144???
这数据溢出的代码没有研究的价值
我只是想知道他是怎末算的,能具体些吗?
unsigned char的最高值是256
b=200
c=200
a=b+c,本来应该是400,但a也是unsigned char,unsigned char的最高值是256,所以数据溢出了,400-256=144 小可爱. 发表于 2022-6-14 16:08
我只是想知道他是怎末算的,能具体些吗?
这东西不同编译器可能会给出不同答案,所以所谓的真相,没有意义
400转成二进制应该是有9位,而uchar只支持8位
所以第9位的256被截断,故剩144 想知道原因很简单,打开你电脑上自带的计算器,选择程序员模式的,在上面输入400,观察它的二进制结果,char只占1字节(即8位),所以只有低8位数才是赋给a的值。然后你在计算器上输入144,再看它的二进制数,自然就知道了。(如果基本的一些知识不了解,二进制完全没接触过,也不懂内存中变量大小字节和二进制位的关系,那我也爱莫能助) 本帖最后由 jackz007 于 2022-6-14 18:10 编辑
a = b + c = 200 + 200 = 400 = 0x0190
400 已经超出一个字节的表达范围(256),对于 char 型的变量 a,字节进位(0x01)无法得到保存,只能保存其余的低位字节,这个低位字节数值是 0x90,也就是十进制数值 144。
数据溢出问题,
页:
[1]