-
如果編譯器將 char 視為無符號 char,則 x 為正 255;
如果編譯器將 char 視為有符號 char,則 x 的第一位是符號位 1,0xff的值為 -1(即補碼 0xff 的原始程式碼);
如果編譯器真的將其視為有符號字元:以下是乙個陷阱
char x=0xff;在這一點上 x!=0xff,但 x=0xffffffff(char 實際上像 int 一樣占用 4 個位元組的儲存空間,空位填充 1),而 unsigned char 則沒有這個問題(所有空位都用 0 填充)。
字元 x=-1; 則 x==-1 為 true。
-
x的值:十六進製ff
基地 255
基地 377
基地 2 1111 1111
ASCII 普通字元僅編碼為0x7f
ff 是乙個特殊字元,用於 Unicode 檔案的標頭中的特殊標記:fffe 或 feff 表示 big-and-little-endian。
-
ASC 查詢表中 255 對應的字元為空,即空白字元。
-
0xffff,它是十六進製的 ffff,它是 1111 1111 1111 1111(2 * 8 = 16 位,2 個位元組)。
但是因為 char 型別只占用 1 個位元組,所以它只有乙個有效的0xff,而且因為預設是有符號數,所以最高的位 1 代表負數,其餘的都是 -1,根據補碼設定的規則0xff它是十進位的 -1
-
這是因為 char 的值範圍為 0 到 127
0xffff超越了這一點。
所以 x 的值是 -1
-
x 等於 oxffff 的十六進製值,即 65535
-
執行以下程式段。
int x = 40;
char z = 'b';
int b;
b = ( x&0xff )&z>'a') 後面的 b 值為 ( )。
正確答案是0
我將在下面向您解釋。
( x&0xff )
OX 表示十六進製。
oxff 的二進位是 0000 0000 1111 1111,那麼 x&0xff 表示將 x 的值與上面的二進位數進行比較,例如 x = 40,那麼它對應的二進位是 0000 0000 0010 1000
也就是說,它仍然是 40 歲,0xff。
( z > 'a' )
那麼對於字元 z,其初始值為'b'
然後 z >'a'此表示式的值為 false。
為什麼,因為在 ASCII 程式碼中,'b'ASCII 為 66,並且'a'ASCII 為 97
因為 97 > 66,所以 z <'a'而不是 z >'a'
因此表示式 (z >'a') 為 false & 操作。
左邊是 40,在 C 中 0 是假的,不是零是真的,那麼左邊是真的
向右是假的
則整個表示式的值必須為 false。
所以最後 b = 0
就是這樣。
-
使用視窗中自帶的計算器轉換十六進製FFFF,結果如下:
十進位為:65535;
八進位為:177777;
二進位檔案為:11111111111111111ps:如果使用程式進行轉換,可能會出現型別溢位錯誤;
-
十六進製 f 轉換為二進位是 1111,所以這個0xffff是 1111 1111 1111 1111,十進位為 65535。
char 型別不能直接用於計算,這裡的輸出是整數,所以報錯,返回值為 -1當返回值超出界外或出現任何錯誤時,返回值的返回值似乎是 -1,而 -1 並不代表此處的計算結果。
-
輸出為 -1。 在輸出函式中,x 首先是輸出值,然後減去 1。
0xff是乙個十六進製數,作為二進位11111111儲存在記憶體中,變數x是有符號的,即11111111是有符號數,最高位1是表示負數的符號位,按照補碼的形式換算成其原碼,即 11111111的最後一位減去1後倒位,即為00000001,即為1,最後加上負號為-1。
-
0xffff是十六進製的,轉換為二進位轉換為11111111 11111111。 char 型別是乙個位元組,明顯是溢位的,只能取後面的八位(即接下來的八個 1),而 char 是有符號的字元,11111111轉換為十進位是 -1。
-
答案-1
過程:char 為有符號數字,char x=0xffff; 得到 x=0xff 是 -1
pritnf("%,x--");先輸出 x 值,然後輸出 -- 所以輸出 -1
-
0xffff 是乙個十六進製表示,轉換為二進位表示為 1111 1111 1111 1111,%d 是用 int 輸出它。
二進位“1111 1111 1111 1111 1111”有乙個負數(非負數的最高數字為 0),它由補碼表示。
從補碼恢復到原碼的原理是:除符號位外,末尾減去 1 後,取否定:
末尾減去 1:除符號位外,取否定:
即 - 0000 0000 0000 0001,即 -1。
所以最終輸出:-1
-
您應該詢問有關格式化輸出的問題。
d 輸出為有符號十進位整數,因此它是 10,d 是有符號十進位整數。
i 是有符號十進位整數。
o 有符號的西方整數。
u 無符號十進位整數。
x 是乙個無符號的十六進製數,用小寫的 abcdef 表示 x 無符號十六進製數,用大寫的 abcdef 表示 f f 浮點數。
e e 科學表示格式的浮點數。
g 表示浮點數,使用 %f 和 %e 表示中的最短位數 g 採用相同的 G 格式,但為指數。
c 單字。
s 字串。
-
char 在乙個位元組中只有 8 位,只有後面的 8 位可以保留11111111轉換為十進位的 -1
-
使用視窗中自帶的計算器轉換十六進製FFFF,結果如下:
十進位為:65535;
八進位為:177777;
二進位檔案為:11111111111111111ps:如果使用程式進行轉換,可能會出現型別溢位錯誤;
-
“*p is char” 為 true,但 value = (int)*p; 在同一句話中,*p 被強制通過 char to int 分配給 value,因此 value 是 int,其值被解釋為 4 個位元組。 此外,printf("%02x", p, value);這句話是錯的,所以不能詳細分析。