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