#include <stdio.h>
int main()
{
char x=0xFFFF;
printf("%d\n",x--);
}
这里面的0xFFFF转换为二进制为1111 1111 1111 1111,为什么会溢出??而取此二进制数的低八位为1111 1111??这个程序为什么在最后转换为整型的时候,要把这个char型x当做有符号型,从而取反+1而得出结果为-1??
哦,原来char型只能取到低八位。那为什么这个程序认定这个char是有符号型的呢(这个程序在TC2.01和Devc++环境下运行得出的结果都是-1)?为什么就不能是无符号型呢?这里char前面没有signed或者unsigned呀?然而得出的结果却是signed char的结果(为-1,而不是unsigned char 的结果255)?
追答默认是signed类型,你定义为unsigned char x=0xFFFF;就输出255了
这样的话,X变为1111 1111(二进制数),但是在输出的时候为什么结果是有符号的(结果为-1),而不是无符号的(结果为255)呢?开始并没有在char 前面说明是singed或者是unsigned型呀。但是,这个程序在TC2.01和Devc++环境下运行得出的结果都是-1,把x当成了signed型数据,为什么不是unsigned型呢?
本回答被网友采纳