深入理解signed unsigned 關鍵字

2021-08-03 17:38:44 字數 1238 閱讀 3335

深入理解signed、unsigned 關鍵字

答:1.-0 和+0 在記憶體裡面分別怎麼儲存:

十進位制數          原碼            反碼         補碼

+0         00000000     00000000   00000000

-0         10000000     11111111   00000000

2.就以類似的例子來描述:

unsigned int a = 6;

int b = -20;

i+j=?

解釋:unsigned int型別的資料與int型別的資料相運算後,自動轉化為unsigned int型別。因此a+b的值不是-14,而是乙個unsigned int型別的數4294967382.

1).先說下這個數字怎麼來的:

在記憶體中,負數的儲存方式是正數的反碼+1.

6:0x00000006

20:0x00000014,補碼:0xfffffffeb

-20:0xfffffffec

>>> 0xffffffec+0x06

4294967282l

2).%d,%u輸出結果不一樣?

int 與unsigned儲存形式一樣,都是補碼形式,區別在於輸出的格式控制符,當以%d輸出,會認為是有符號數,這樣就把最高位的1當成了符號位,也就是負數(0是正數),當以%u輸出,會認為是無符號數,這樣它會將所有16位的組成都看成是數本身的組成,而沒有符號位一說,所以輸出結果是由16個1組成的二進位制數。

這要看你的i+j的輸出格式的,如果是%u 輸出的話 那肯定是沒有負數的。應該是乙個很大的正數。但是以%d輸出的話就會轉成int 型別了  就會是-14了。

3.unsigned i = 9; for(i=9; i>0; i--) 為什麼會出錯。

因為:無符號數永遠沒有負數,恆大於等於0,死迴圈,。

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...

mysql 索引深入理解 深入理解MySql的索引

為什麼索引能提高查詢速度 先從 mysql的基本儲存結構說起 mysql的基本儲存結構是頁 記錄都存在頁裡邊 各個資料頁可以組成乙個雙向鍊錶每個資料頁中的記錄又可以組成乙個單向鍊錶 每個資料頁都會為儲存在它裡邊兒的記錄生成乙個頁目錄,在通過主鍵查詢某條記錄的時候可以在頁目錄中使用二分法快速定位到對應...

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...