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