char ch = 128会输出-128 麻烦解释一下

我知道高位是1
ch = 10000000 所以是负数

那也是-0啊 为什么是-128?

负数的表达是取反加1,所以10000000是-128,0固定是00000000而为什么-128不能是-0?因为加法运算一定要+n+-n=0,比如-1+1=11111111+00000001=00000000 首位溢出。-128+0等于多少?还是-128,这是不符合加法运算的
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-12-17
为什么要用char来定义128,128已经超出了ascii码的范围啊
第2个回答  推荐于2016-07-29
不知道楼主是否知道 《源码》 《反码》 《补码》 的概念。

数字在计算机里面都使用补码来存储,原因在于,使用补码,可以将符号位和数值位统一处理;同时,加法和减法也可以统一处理。

正整数的补码与原码相同。
求负整数的补码,原码符号位不变,其他位置取反之后,再加1

所以10000000的源码是符号位不变还是1,其他位置取反就是1111111就是127,再加1,就是128。因此就是-128啦。

而不管是+0还是-0的源码补码都是一样的,都是00000000本回答被提问者和网友采纳

求大神指点,输出的-128怎么来的
c=x是将0000000010000000赋给一个一字节变量c,按C\/C++规定,多于8位的数据赋给8位变量时只截取最低8位,所以结果是c==10000000。这个数刚好是-128的8位表示的补码。

char c=128; printf("c=%d\\n",c); 结果为什么是-128,请解释为什么?
127用二进制表示为:0111 1111,128表示为1000 0000,这里发生溢出,因为第一位为1,为符号位,表示负数,即-128

char a = 128; printf("%d", a); 为什么输出结果为-128?
char a = 128;a=1000 0000 ---128 在计算机中,整型类数值是用补码来表示的,1000 0000是一个字节-128的补码,所以,按%d输出就是-128. 并不是你所说的过程中的意义,虽然,表面看你写的没啥错误。

想c语言大神问问题 int z=128 char c c=z
因为int有4个字节也就是32位,所以128不会溢出 而char只有一个字节,8bit,范围是-128~+127 所以当你赋值时候其实溢出了,所以取补码,也就是-128

char a=128;printf(%x\\n,a); 打印出来的是ff80???
如你这样编写 char a=128;printf(%d\\n,a);运行的结果是 -128.所以在使用char时 应避免>=128的数 从'const int' 到 'char'数据截断,即标识符转换为更小的类型,从而导致信息丢失.错误的程序就算可以运行得的结果也是匪夷所思的. 就像未考虑'\\0' 结果会出现一堆 烫 一样 ...

char类型的取值范围为何是-128~127,怎么算的啊
1,char类型是8位,最高位是符号位,0正1负,所以01111111是127。2,-127是10000001,而10000000换算过来就是-128。1, “一个n位有符号int型数值,其范围为-2^(n-1) ——2^(n-1) -1”。导致此情况的根本原因是“人们解决问题时,习惯以人的思维思考问题。2,计算机本身确实以机器的思维...

char 溢出问题
1,第1种情况下,当ch = 127的时候,ch在内存实际存储的二进制数是0111 1111,这个数加1(也就是ch=128)之后就成了1000 0000,如果char是有符号的,二进制的第一位是用来表示符号位的,符号位如果是1的话,则这个二进制数实际上是个补码,它实际上就是-128的补码,所以说有符号的char是不...

char 为什么能表示 -128?
对于正数,补码就是原码,也就是本身的二进制值。而负数,除符号位外,补码是其原码按位取反后加一。char为一个字节,占8位。当值为1000 0000时,其最高位符号位为1,表示其为负数。真值为 0000000 按位取反后加一,即1111111+1 = 10000000 转为10进制就是128。于是char可以表示-128。

为什么以下代码的输出结果是-128,而不是127?
for (d = 0; d + 1 > 0; d++)d从0开始自增,到了d=127,然后127+1>0满足条件,继续下一个循环 但是这个时候d是char型,能表示的范围为-128到127,所以127再自增后就变成了-128,-128+1 < 0不满足条件则跳出,所以输出-128

c=127 c=c+1 最后为什么c=-128
char类型只占用一个字节,取值范围在-128~127之间,127+1的结果为128,导致c字节的最高位为1,而这在二进制中属于符号位,最高位为1时,表示负数,所以就变成了-128。如果想表示一个无符号的数,可以定义为:unsigned char c;这时c的取值范围就变成了0-255,可以正确表示大于127的正整数。

相似回答