C 型別轉換,切勿混用無符號數和有符號數

2021-10-10 10:41:07 字數 715 閱讀 3789

型別所能表示的值的範圍決定了轉換的過程:

儘管我們不會故意給無符號物件賦乙個負值,卻可能(特別容易)寫出這麼做的**。

當乙個算術表示式既有無符號數又有無符號數又有int值時,那個int值就會轉換成無符號數。

若有符號數和無符號數進行運算或比較,會先將有符號數轉換為無符號數,然後再進行運算或比較。

unsigned u = 10;

int i = -42;

cout << u + i << endl; // 如果 int 佔 32 位,輸出4294967264

切勿混用帶符號型別和無符號型別,如果表示式裡既有帶符號型別又有無符號型別,當帶符號型別取值為負時會出現異常結果,這是因為帶符號數會自動地轉換成無符號數,例如在a*b式中,如果a=-1,b=1,而且ab都是int,則表示式的值顯然是-1。然而如果aintbunsigned,則結果必須視在當前機器上int所佔位數而定。在我們的環境裡,結果是 4294967295。

有符號數和無符號數混用的思考

參考文章 1 c語言中無符號數和有符號數之間的運算 2 負數在計算機中怎樣儲存 3 二進位制減法 原碼 10進製轉換成2進製是原碼,只不過正數的原碼是本身符號位為0,負數的原碼符號位為1 以下篇幅均以單位元組為例 10進製1的原碼是0000 0001,10進製 1的原碼是1000 0001 反碼 正...

C 有符號數和無符號數

1.有符號數和無符號數 c支援所有整形資料型別的有符號數和無符號數運算。儘管c標準並沒有指定某種有符號數的表示,但是幾乎所有的機器都使用二進位制補碼。通常,大多數數字預設都使有符號的,c也允許無符號數和有符號數之間的轉換,轉換原則是基本的位表示保持不變。因此在一台二進位制補碼機器上,當從無符號數轉換...

有符號數和無符號數

有符號和無符號整數 1.通常情況下,大多數字預設的是有符號數,比如 4,5 要想寫乙個無符號數必須在後面加u 比如 4u,5u 2.在計算機中有符號數是用補碼的形式來表示的,最高位是符號位。無符號數就是正數唄 正數的補碼和原碼相同。比如 1 在計算機中表示為 11111111 11111111 11...