C 中當unsigned和int間的隱式轉換

2021-05-21 23:08:03 字數 435 閱讀 1301

當unsigned遇到int時,隱式轉換是怎樣的呢?

看如下**:

#include

int main()

第乙個輸出,a + b = -1,           可以理解

第二個輸出,a + b > 0 ?   1        為什麼?-1不小於0嗎?為什麼大於0是成立的?

答案出在隱式轉換裡頭,當unsigned型別的a和int型別的b相加時,結果將隱式轉換為unsigned型別,

第乙個輸出結果之所以是-1,是因為我們已經將它的輸出格式限定為%d了,所以它被強制轉換為int。

而在第二個輸出中,a + b 返回的是unsigned,而(unsigned)-1的機器碼是0xffffffff(這裡預設int為32位),如果用unsined型別來解讀這個機器碼,那結果將是2^32 -1,比0大得多了,所以a + b > 0 成立。

C 中char和int轉換

1 整數轉化字串 sprintf 在標頭檔案 include中 語法 int sprintf string format,mixed args 返回值 字串長度 strlen 轉換字元 印出百分比符號,不轉換。c 整數轉成對應的 ascii 字元。d 整數轉成十進位。f 倍精確度數字轉成浮點數。o ...

C語言signed和unsigned之間的程式設計陷阱

c語言中的整數可分為有符號整數 signed 和無符號整數 unsigned 如果在程式中沒有特殊標識,整數型別預設為signed,這裡包括直接書寫的整數數字。定義unsigned類的整數時,可用unsigned作為字首,如果是直接書寫的數字,則在數字後加 u 如2456326u。signed類的整...

C 中 DWORD和int的區別

int 代表int,dword 代表 unsigned long int會隨著機器位數的不同而發生變化,比如在16位機上為16為,在32位機上為32位,在64位機上為64位。看看最原始的定義就知道了。dword是無符號的,相當於unsigned long 它是mfc的資料型別。而int是有符號性的,...