C語言整型提公升

2021-09-25 13:06:21 字數 866 閱讀 5851

直接上題

signed char a=

0xe0

;unsigned int b=a;

unsigned char c=a;

下面說法正確的是:

a. (a>0)&&(b>0)為真

b. c==a 為真

c. b的16進製為0xffffffe0

d. 都不對

說實話這題目第一眼我就沒看懂啥意思,後來看了大佬的分析,發現裡面的門道挺多的

首先第一句

signed char a=

0xe0

;\\0xe0是16進製表示,轉換為二進位制就是11100000,符號位為1說明這是個負數

由於計算機中負數是以補碼的形式存在的,按照補碼轉原碼的規律:按位取反,末位加1,

a的原碼是10100000即10進製下的-32。

第二句

unsigned int b=a;
這裡就涉及到整型提公升的概念,字元型變數和短整型變數轉換為整型使用時需要整型提公升

具體規律是:

那麼對於第二句

相當於將 signed char 的a 整型提公升為 unsigned int 的b

而a的符號位為1(a為11100000)補到32位表示為11111111 11111111 11111111 11100000

表示為16進製制即為0xffffffe0

第三句

unsigned char c=a;
無符號數的原碼補碼反碼是一樣的,因此c的二進位制表示為11100000,即224

因此最後的答案是c

C語言整型提公升

整型提公升 c的整型算術運算總是至少以預設整型型別的精度來進行的 為了獲得這個精度,表示式中的字元和短整型運算元在使用之前被轉換為普通整型 表示式的整型運算要在cpu的相應運算器件內執行,cpu內整型運算器alu的運算元位元組長度一般就是int位元組長度,同時也是cpu的通用暫存器的長度 因此,即使...

C語言的表示式求值問題(整型提公升)

表示式求值的順序一部分是由操作符的優先順序和結合性決定。同樣,有些表示式的運算元在求值的過程中可能需要轉換為其他型別。隱式型別轉換 c的整型算術運算總是至少以預設整型型別的精度來進行的。為了獲得這個精度,表示式中的字元和短整型運算元在使用之前被轉換為普通整型,這種轉換稱為整型提公升。為什麼要整型提公...

C語言整型提公升的規則及樣例詳解

什麼是整型提公升?整型提公升是c程式語言中的一項規定 在表示式計算時,各種整形首先要提公升為int型別。表示式的整型運算要在cpu的相應運算器件內執行,cpu內的整型運算器的運算元的位元組長度一般是int 型別的位元組長度,即四個位元組。因此即使是兩個char char型別為乙個位元組 型別的數相加...