只有十分,见谅解决方案

只有十分,见谅
谭浩强的   《C语言程序设计》第二版   52页

char   c   =130;//char   的范围是-128——127,为什么不发生编译错误?
printf( "%d ",   c);

为什么输出-126呢。具体是怎么得到的?



------解决方案--------------------
由于字符char是由补码表示
所以才会有这样结果

130
2进制表示是10000010 
10000010 是 -126的补码

------解决方案--------------------
char 的范围是-128——127,为什么不发生编译错误?

对于char
计算机只接受一个字节 8位
超过的会被截断
你就是输入456它也照样编译
不过超过的位会被截掉
------解决方案--------------------
如果你把-128——127看成一个循环。


------解决方案--------------------
你看看130是不是等于-126


`
------解决方案--------------------
计算机会自动把溢出的数当成补码来处理的!
------解决方案--------------------
实际在老谭的书上已经讲过你问的问题的答案了,再好好看看了 。
------解决方案--------------------
呵呵,老谭的C语言可是经典呢,要仔细看