| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
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. 
 
 
 |   
 
 
 
 |