直接上題
下面說法正確的是: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. 都不對
說實話這題目第一眼我就沒看懂啥意思,後來看了大佬的分析,發現裡面的門道挺多的
首先第一句
由於計算機中負數是以補碼的形式存在的,按照補碼轉原碼的規律:按位取反,末位加1,signed char a=
0xe0
;\\0xe0是16進製表示,轉換為二進位制就是11100000,符號位為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型別為乙個位元組 型別的數相加...