c語言負數左移右移 C語言負數的移位運算

2021-10-12 22:30:07 字數 959 閱讀 5470

在c

中左移也就是所說的邏輯移位,

右端補,而右移是算數移位,左端補齊的是最高位

的符號位。

故負數左移,有可能變成正數,但負數右移,肯定還是負數。

用進製的形式對資料進行賦值

,這進製的數代表的是補碼。

i = 0xfffffff7; //0xfffffff7

是補碼,而不是原碼,故

i = -9

printf("%d %x\n", i, i);

i = -9;

printf("%d %x\n", i, i);  //

故兩個printf

輸出結果相同

* compiler: gcc

* last update:  tue 01 may 2012 07:31:44 pm cst

#include 

int main(int argc, char **ar**)

int i = 0x8000000f; //

這裡的0x8000000f

為int

型資料的補碼形式

int j =

i >> 3; //

右移是算術移位,

i的值不變,

左端補齊的是符號位

int k = i

左移是邏輯移位,右端補

printf("%d %x\n", i, i);

printf("%d %x\n", j, j);

printf("%d %x\n", k, k);

i = -9;

printf("%d %x\n", i, i);

i = 0xfffffff7;

j = i >> 3;

k = i <

printf("%d %x\n", i, i);

printf("%d %x\n", j, j);

printf("%d %x\n", k, k);

c語言負數左移右移 C語言中的左移與右移

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

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

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

c語言負數左移右移 C語言 位運算子的運算規則

位運算是指按照二進位制進行的運算,在c語言中,提供了6種的位運算子,他們分別是按位與 按位或 按位異或 按位取反 左移 和右移 這些運算子只能用整型運算元,也就是說只能用於帶符號和不帶符號的short,int,long,char型別。1 按位與 按位與是指講兩個運算元按照二進位制位進行 與 運算。兩...