有符號數與無符號數之間運算問題

2021-09-01 04:33:32 字數 785 閱讀 8934

有符號數與無符號數之間運算問題

以下實驗均在virual c++6中執行通過

這個問題測試是否懂得c語言中的整數自動轉換原則,有些開發者懂得極少這些東西。當表示式中存在有符號型別和無符號型別時所有的運算元都自動轉換為無符號型別。因此,從這個意義上講,無符號數的運算優先順序要高於有符號數,這一點對於應當頻繁用到無符號資料型別的嵌入式系統來說是丰常重要的。

首先進行乙個實驗,分別定義乙個signed int型資料和unsigned int型資料,然後進行大小比較:

unsigned int a=20;

signed int b=-130;

a>b?還是b>a?實驗證明b>a,也就是說-130>20,為什麼會出現這樣的結果呢?

這是因為在c語言操作中,如果遇到無符號數與有符號數之間的操作,編譯器會自動轉化為無符號數來進行處理,因此a=20,b=4294967166,這樣比較下去當然b>a了。

再舉乙個例子:

unsigned int a=20;

signed int b=-130;

std::cout《減法和乘法的運算結果類似。

如果作為signed int型資料的b=-130,b與立即數之間操作時不影響b的型別,運算結果仍然為signed int型:

signed int b=-130;

std::cout<

特別注意 :

如果僅是int a = 20;

a 代表的是有符號數,即其等價意思是:signed int a = 20;

有符號數與無符號數之間運算問題

以下實驗均在virual c 6中執行通過 這個問題測試是否懂得c語言中的整數自動轉換原則,有些開發者懂得極少這些東西。當表示式中存在有符號型別和無符號型別時所有的運算元都自動轉換為無符號型別。因此,從這個意義上講,無符號數的運算優先順序要高於有符號數,這一點對於應當頻繁用到無符號資料型別的嵌入式系...

有符號數與無符號數運算

有符號數與無符號數之間運算問題,這個問題測試是否懂得c語言中的整數自動轉換原則,有些開發者懂得極少這些東西。當表示式中存在有符號型別和無符號型別時所有的運算元都自動轉換為無符號型別。因此,從這個意義上講,無符號數的運算優先順序要高於有符號數,這一點對於應當頻繁用到無符號資料型別的嵌入式系統來說是丰常...

有符號數與無符號數

關於有符號數和無符號數的一些重要知識點,包括它們在記憶體中的儲存方式 互相轉換 越界計算等。大家肯定都知道,對於有符號數,資料型別的最高位用於標示資料的符號,最高位為1表示負數,最高位為0表示正數,那麼今天我們主要就此討論乙個問題 在計算機內部具體是如何表示有符號數呢?在計算機內部是通過補碼的方式來...