关于符号位的一些思考

    咱们都知道在c语言中,正数和负数在内存中都是经过补码的方式在存储的(正数的补码为正数自己,负数的补码为反码+1);char型的数据实际上是一个8位的短型的整数型,那么首先咱们得在本身的运行平台上确认一下默认的char是有符号型的整型仍是无符号型的整型:code

//判断在当前编译器上char默认是有符合型 仍是无符号型
void testChar()
{
	char a = 0;
	unsigned char b =0;
	a = -2;
	b = -2;

	if(a < 0 && b > 0)
	{
		printf("char is signed!\n");
	}
	else
	{
		printf("char is unsigned!\n");
	}

	a = 129;
	printf("%d\n", a);
}                                                       
输出 char is signed !
     -127

经过输出结果能够看出,char在个人机器上默认是有符号型的;那接下来我就想去确认最高位是否就是符号位:
有符号型的char的取值范围是[-128, 127],咱们给a赋值129,显然超出了范围
129的二进制表示 1000 0001
那么若是最高位为符号位的话,那么1000 0001就会被char解析成一个负数,那这个负数是多少呢?
000 0001首先减去1,而后取反码获得的结果是111 1111,加上符号位1,即应该是负数-127,恰好和咱们的结果相符,也就证实了对于8位的有符号型的char来讲,第8位即最高位就是符号位!内存

相关文章
相关标签/搜索