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

2021-06-10 06:24:30 字數 1025 閱讀 9674

以下實驗均在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<

(解釋:如果都統一到float 層級上了,而float 和 double都沒有無符號這種形式,只有有符號的形式,所以全部是有符號的 )

cout<<(1>-2)<-2)<-2.)<

其實有符號和無符號的比較就兩個步驟

1   首先是位元組層面上的統一,1) 統一到最寬的位元組  2)低於int的,統一到int  。

2   然後再統一符號, 有符號和無符號就全部統一到無符號的。

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

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

有符號數與無符號數運算

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

有符號數與無符號數

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