簡體   English   中英

C按位移位

[英]C bitwise shift

我認為sizeof(char)是一個字節。 然后,當我寫下面的代碼,

    #include<stdio.h>

    int main(void)
    {
       char x = 10;

       printf("%d", x<<5);
    }

輸出為320

我的問題是,如果char長度為一個字節,值為10,則應為:

0000 1010

當我換班5時,不應該成為:

0100 0001

那么為什么輸出320而不是65?

我在Linux上使用gcc並檢查sizeof(char) = 1

在C中,所有小於int中間體都會自動提升為int 因此,您的char被提升為大於8位。

所以你的0000 1010正在向上移動5位以獲得320.(沒有任何東西從頂部移開)

如果你想旋轉,你需要做兩個班次和一個面具:

unsigned char x = 10;

x = (x << 5) | (x >> 3);
x &= 0xff;

printf("%d", x);

使用內聯匯編可以更快地完成它,或者如果編譯器支持它,內在函數。

神秘是對的。 如果你這樣做

char x = 10;
printf("%c", x);

它打印“@”,如果你檢查你的ASCII表,它是64。

0000 1010 << 5 = 0001 0100 0000

你有溢出,但由於它被提升為int,它只是打印了數字。

因為你描述的是旋轉,而不是轉變。 在左移時總是移入0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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