變數的屬性 unsigned和signed

2021-08-20 11:22:26 字數 1412 閱讀 7387

問題:c語言是如何表示乙個數為負數和整數的?

因此在c語言中,增加了兩個關鍵字用於表示整數和負數。

1.signed表示未有符號的型別

2.unsigned則表示無符號型別

3. c語言中只有整數型別能夠宣告unsigned變數

4. c語言中變數預設為有符號型別

資料型別的最高位用於標識資料的符號

1. 最高位為1,表明這個數為負數

2. 最高位為0,表明這個數為正數

示例**:有符號數的符號位

int main ()

輸出結果: 1 0

實際上,在計算機內部用補碼表示有符號數

1. 正數的補碼為正數本身

2. 負數的補碼為負數的絕對值各位取反後加1

例: 1.8位整數5的補碼:0000 0101

2.8位整數-7的補碼:1111 1001

在計算機內部用原碼表示無符號數

1. 無符號數預設為正數

2. 無符號數沒有符號位

對於固定長度的無符號數

1.max_value + 1 -> min_value

2.min_value - 1 -> max_value

示例**:錯誤使用了unsigned

int main ()

return

0 ;}

輸出結果:不停的列印結果。

實際上,unsigned宣告的變數不可能小於等於0。

如果無符號數與有符號數混合運算,會產生什麼樣的結果呢?

示例**:

int main ()

else

printf ( "i + j = %d\n" ,(i + j ));

return

0 ;}

輸出結果:

i + j > 0

i + j = -5

問題:安裝我們的運算結果,應為為5+(-10) = -5,i+j應該是小於0的。那麼為什麼輸出結果卻是i+j>0呢?

1.當有符號數j和無符號數i進行比較運算時,會將有符號數轉換為無符號數後再進行計算,結果為無符號數,所以輸出i+j>0。

2.那麼為什麼輸出結果卻是i+j = -5呢?這是因為%d預設是按有符號int型別輸出的。這也說明了有符號無符號並不是影響輸出結果。

signed和unsigned的比較

昨天,zrf師兄丟給我這樣乙個題,據說是微軟面試題 unsigned int i 3 cout 問結果是多少。第一反應 3。不過結果似乎不是這樣的,寫了個程式,執行了一下,發現是 4294967293。很詭異的乙個數字,怎麼也想不明白為什麼會是這麼個奇怪的數字。但是在我發現這數的十六進製制數是fff...

signed和unsigned的比較

unsigned int i 3 cout 問結果是多少。第一反應 3。不過結果似乎不是這樣的,寫了個程式,執行了一下,發現是 4294967293。很詭異的乙個數字,怎麼也想不明白為什麼會是這麼個奇怪的數字。但是在我發現這數的十六進製制數是fffffffd時,我想我已經離答案很近了.這個涉及到了混...

unsigned 和 signed 的理解

include int main int argc,char argv 結果 65535 1 這是兩段很簡單的 我就以第二段 為例。c語言中常量整數 1的補碼表示為0xffffffff。擷取後面16位ffff賦值給 變數a unsigned short 此時 a 0xffff a沒有符號位,0xff...