關於符號位的一些思考

    咱們都知道在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位即最高位就是符號位!內存

相關文章
相關標籤/搜索