簡體   English   中英

C位移位short整數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM