为什么signed char的范围是-128~127

了解更多知识请点我:学习C语言之路(汇总篇)


signed 无符号负数原理解答

问题:为什么signed char的范围是-128~127

函数案例

 #include<stdio.h> 
int main(int argc, char *argv[]) 
 { 
	signed char Num1 = 0xB7;    //0x10110111 
    unsigned char Num2 = 0xB7 ; //0x10110111 
	 
	 printf("Num1=%d,Num2 = %d\n", Num1,Num2); 

 	return 0; 
}

仿真测试&结果

 #include<stdio.h> 
int main(int argc, char *argv[]) 
 { 
	signed char Num1 = 0xB7;    //0x10110111 
    unsigned char Num2 = 0xB7 ; //0x10110111 
	 
	 printf("Num1=%d,Num2 = %d\n", Num1,Num2); 

 	return 0; 
}

在这里插入图片描述

问题来了

结果signed char Num1 = -73 //0x10110111
结果unsigned char Num2 = 183. //0x10110111

原理:负数在计算机里面有补码的概念

结果讲解

Num1 = 1*(-2^7)+ 1*(25)+1*(24)+22+21+2^0;
-128+32+16+4+2+1 = 73
Num2 = 1*(2^7)+ 1*(25)+1*(24)+22+21+2^0;
128+32+16+4+2+1 = 183

负数补码原理

负数的补码就是将原码的值所有值去反再+1
举例
-1 = 转 0000 0001 》 1111 1110 然后在后面加+1 》 1111 1111 》-128+127 = -1

-3 = 转 0000 0011 》 1111 1100 然后再后面加+1 》1111 1101 》-128 +125 = -3

正数补码为它本身

猜你喜欢

转载自blog.csdn.net/qq_38179373/article/details/107427381