關於c語言的左移運算

2022-09-17 02:03:10 字數 512 閱讀 1025

對於任意w位的二進位制,進行k位的移動時,真實的位移量為k mod w

32bit的例子

1 << 1 結果2 1 mod 32 => 1

1 << 32 結果1 32 mod 32 => 0

1 << 33 結果2 33 mod 32 => 1

但,如果是純字面量計算,卻得出0,看**:

int a = 33

;printf("%d

", 1

<< a); //

2printf("

%d", 1

<< 33); //

0

第一種情況,在編譯過程中,由於gcc編譯器不知道變數a的值,所以,位移量為33,會執行33%32=1,答案是2

第二種情況,在編譯過程中,如果加上-wall編譯選項,gcc編譯器會提醒你,位移量大於型別的寬度,所以,按照gcc自己處理的來,得到的答案是0,就是你的想法。

以上解釋也不是很清楚,我也沒有在gcc手冊找到解釋。先擱置吧。

c語言負數左移右移 C語言中關於迴圈左移和迴圈右移

昨天在解答同學的問題中,又接觸了好久沒碰的c中的位操作。在重接觸的過程中,又理解了一遍計算機儲存資料的細節,於是分享給大家看一下。讓我們先看一下題目 編寫乙個程式,輸入兩個整數i j,如果j的值大於0,則將i迴圈左移j位 如果j的值小於0,則將i迴圈右移j位,最後輸出i的值。輸入輸出格式要求 輸入格...

C語言裡的左移和右移運算

先說左移,左移就是把乙個數的所有位都向左移動若干位,在c中用 運算子.例如 int i 1 i i 2 把i裡的值左移2位 也就是說,1的2進製是000.0001 這裡1前面0的個數和int的位數有關,32位機器,gcc裡有31個0 左移2位之後變成 000.0100,也就是10進製的4,所以說左移...

C語言裡的左移和右移運算

比較淺顯的來說,左移n位就是乘以2的n次方,右移n位就是除以2的n次方。具體細節如下 先說左移,左移就是把乙個數的所有位都向左移動若干位,在c中用 運算子.例如 int i 1 i i 2 把i裡的值左移2位 也就是說,1的2進製是000.0001 這裡1前面0的個數和int的位數有關,32位機器,...