咱们都知道在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位即最高位就是符号位!内存