|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 lomoxxt 于 2019-7-30 10:25 编辑
#include <stdio.h>
int main()
{
signed char i;
i = 255;
printf("signed char %hhd\n", i);
return 0;
}
…………………………………………………………………………………………
打印结果是-1,答案解析char 类型占一个字节的空间,因此 unsigned char 的取值范围是 0~255,signed char 的取值范围则是 -128~127。十进制的 255 即二进制的 11111111,signed char 第一位为符号位,因此其值转换为十进制后是 -1。
前面一直到“signed char 第一位为符号位”这句还明白,最后一句看不懂——请问怎么转换成-1了呢?
1111 1111 不是应该是-127吗?为啥变成了-1呢?
求详细过程。感谢感谢!
数据是以补码的形式存储的,正数的补码是本身,负数的补码是除符号位外其它位取反,再加上1,1111 1111 是 补码,转换成原码是 1000 0001,就是 -1.
|
|