求大神指点,输出的-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的正整数。