[英]C bits shifting short ints
為什么結果
include <stdio.h>
int main()
{
unsigned short int i = 0xff ;
unsigned short int j;
j= i<<2;
printf("%x n%x\n", i, j);
return 0;
}
j = 3fc嗎?
如果i和j均為short int-則它們均為2bytes值,因此j應該= fc?
提前謝謝解釋。 〜
〜
不,0x3fc是正確的。 請注意,一個字節是兩個十六進制數字,因此(16位)short總共有4個十六進制數字。
將0xff左移兩位如下所示:
0000 0000 1111 1111 0 0 f f 0000 0011 1111 1100 -- Shifted left 2 bits. 0 3 f c
所以0x00ff << 2 = 0x03fc 一切看起來都應該如此。
0xff << 2 == 0xff * 4 == 0x3fc == 1020
即使它們是2個字節,也允許它們保持這個較小的值。
3FC僅需要存儲12位,因此可以2個字節存儲。
C ++不保證unsigned short int
的字節數。 實際上,除了char
保證為1個字節之外,幾乎不保證任何類型的大小。
在這種情況下,這無關緊要,因為3fc只能成功存儲在2個字節中。
也許這是您實際嘗試編寫的? (請記住,十六進制數字僅為4位,即半個字節)
#include <stdio.h>
int main()
{
unsigned short int i = 0xffff;
unsigned short int j;
j = i<<8;
printf("%x %x\n", i, j);
return 0;
}
輸出ffff ff00
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.