unsigned 和 signed 混合運算總結

2022-04-05 18:20:43 字數 1496 閱讀 6922

unsigned 和  signed 混合運算總是被問及,我這裡總結一下。這裡的幾個情況:

1

.同等資料寬度,只要出現 unsigned ,皆以unsigned 運算。

2. 同等符號字首,自動轉化為大位寬大資料範圍處理,如 unsigned long

long 和 unsigned int ,總以 unsigned long

long

處理.3

.不同資料寬度且不同資料符號字首:

<1> unsigned short 和 int ,皆轉化為 int

int a = -2

; unsigned

short = 1

; a / b 等於 -2 ,因為以 int

計算;

int a = 2

; unsigned

short = -1

; a / b 等於 0,因為以int 算,unsigned short 轉化為 int ,即為 65535

,結果自然為0

<2> unsigned int 和 short ,皆為 unsigned int

運算; unsigned

int a = +2 / -2

;

short b = 1

; a / b 等於 2或者 0xfffffffe,皆以 unsigned int

算; unsigned

int a = -2

;

short b = -1

; a /b 等於0 ,分子小於分母

<3> unsigned int 和 long ,皆按照 unsigned long 運算,嚴格來說是按照unsigned int

; unsigned

int a = 2

;

long b = -1

; a /b 為0

unsigned

int a = -2

;

long b = 1

; a / b 為 0xfffffffe

<4> unsigned int 和 long

long (__int64),皆按照 long

long

(__int64)處理

<5> unsigned long

long 和 int ,皆按照 unsigned long

long

處理

<6 - n> .....

從這些情況,我們不難得出這樣的結論,混合符號且混合位寬的資料之間運算,總是以大資料範圍大位寬的量為準,再聯想到 1.2情況,發現所有的情況都以大資料範圍大位寬數為準。

得出的結論是:unsigned 或 signed 混和運算,以大資料大位寬量為準。

注意:驗證的時候,不要用 printf 列印出來的資料為準,請反彙編對比。

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...