从unsigned 到 singned 的转换unsignedcharaa255charbbbbaaprintf( %d\n ,bb)//-1按照书上所讲的a
从unsigned 到 singned 的转换
unsigned char aa = 255;
char bb;
bb = aa;
printf( "%d \n ", bb); // -1
按照书上所讲的
aa在内存存放形式是 1111 1111
放到bb里.bb的存放形式是 1111 1111 但是第一个1变成了符号位
其结果是 111 1111 = 127
加上符号位的话,,是 -127...但结果出来的却是 -1..
请大家帮我更正我错误的原因.....
[解决办法]
负数是用补码表示的,补码表示为相应的正整数取反后加1:
127的补码为 (127取反 + 1),即0111 1111(127) 取反为 1000 0000,然后加1
得到-127的二进制为1000 0001。
而-1的补码为1111 1111
