c語言中位運算的左位移右位移都是什麼意思

假設0010
左移就是把二進制數向左移動,右邊補0,0的二進制全是0,左移之後右邊再補0。
0010<<2 就是1000 實際是做的*4。
1000>>2 計算 0010 實際做的是/4。

② C程序中,左移「<<」、右移「>>」 的具體用法是什麼

C語言中,「<<」為左移運算符,「>>」為右移運算符。

具體使用方法如下:

1、左移運算符(<<)

將一回個運算對象答的各二進制位全部左移若干位(左邊的二進制位丟棄,右邊補0)。

例:a = a << 2 將a的二進制位左移2位,右補0,

左移1位後a = a * 2;

若左移時舍棄的高位不包含1,則每左移一位,相當於該數乘以2。


2、右移運算符(>>)

將一個數的各二進制位全部右移若干位,正數左補0,負數左補1,右邊丟棄。

操作數每右移一位,相當於該數除以2。

例如:a = a >> 2 將a的二進制位右移2位。

左補0 or 補1 得看被移數是正還是負。

③ 如何計算java 中的左右位移運算和不帶符號的位移運算

看:

a)「>>」運算符

「>>」運算符作帶符號的位移處理,它作位移處理時,會先將值向右移,並在高位填0,然後將位移後所空出的高位,全部改成原來的最高位的值(代表正負號的位)。也就是說負的值位移後,仍然是負的值,比如:

-10>>2 =-3

-10= 1111 1111 1111 1111 1111 1111 1111 0110

右移2位:0011 1111 1111 1111 1111 1111 1111 1101

結果:1111 1111 1111 1111 1111 1111 1111 1101 (全部天上原本符號位的值:1)

b)「>>>」運算符

「>>>」運算符所作的是無符號的位移處理,它不會將所處理的值的最高位視為正負符號,所以作位移處理時,會直接在空出的高位填入0。當我們要作位移的原始值並非代表數值時(例如:表示顏色圖素的值,最高位並非正負號),可能就會需要使用此種無符號的位移。比如:

-10>>>2=1073741821

-10=1111 1111 1111 1111 1111 1111 1111 0110 (不管原來的「符號」位的值(一長串1),空上的全部直接填0)

0011 1111 1111 1111 1111 1111 1111 1101=1037341821

c)「<<」運算符

「>>」運算符的所作的也是無符號的位移處理,同樣地,它不會將所處理的值的最高位視為正負符號,它作位移處理時,會直接左移並在低位填入0。所以第二高位以下的位若移到了最高位,該值的正負可能會與原來的不同。

-2147483647<<2=4

-2147483647=1000 0000 0000 0000 0000 0000 0000 0001

0000 0000 0000 0000 0000 0000 0000 0100=4

d)「<<<」運算符
恩,當然了,在java里不存在它。

④ 單片機 移位操作 右移 C語言

樓主:
看我給你修改一下,作為給你參考:
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
void delayms(uint);
uchar aa;
void main()
{
aa=0xfe;
//你原來的
while(1)
{
P1=aa;
delayms(500);
aa=_crol_(aa,1);
}
//下面我寫的
//右移1位
while(1)
{
P1=aa;
delayms(500);
aa=aa<<1; //右移1位
}
//左移1位
while(1)
{
P1=aa;
delayms(500);
aa=aa>>1; //左移1位
}

//右移8位
while(1)
{
unsigned char i;
for(i=0;i<8;i++)
{
P1=aa;
delayms(500);
aa=aa>>1;
}
}

}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
//這個是做流水燈時候 運用系統文件里自帶的_crol_函數進行移位 此函數是左移函數 什麼函數能是此程序右移?或者如何編寫 謝謝

⑤ verilog中移位操作符號

verilog中移位操作符號有2種,分別是「<<」左移位運算符和「>>」右移位運算符。

格式如下:a<<n,a>>n。其中,a代表要移位的操作數,n代表要移幾位。兩種運算方式都用0來填補移出的空位。

移位操作符對左邊的操作數進行向左或向右的位移位操作,第二個操作數,移位位數是無符號數,遵循的操作規律是「左移時先補後移,右移時先移後補」。

在進行移位運算時,應當注意移位前後變數的位數。如果操作數已經定義了位寬,則進行移位後操作數改變,但是其位寬不變。

(5)右位移代碼擴展閱讀

verilog HDL運算符

1、邏輯運算符:&&邏輯與;||邏輯或;!邏輯非。

2、關系運算符:<小於、>大於、<=小於等於、>=大於等於。

3、等式運算符:==等於、!=不等於、===等於、!==不等於。

4、移位運算符:<<左移位、>>右移位。

5、位拼接運算符:{a1,a2,a3.......}

6、縮減運算符:先將操作數的第一位與第二位進行與、或、非運算,然後將結果與第三位進行與、或、非運算,依次類推,直至最後一位。

⑥ 左移右移循環移位器的代碼

左移函數_crol_(); 右移函數_cror_(); 這兩指令都在頭文件<intrins.h>

⑦ C程序中,左移"<<"、右移">>" 的具體用法是什麼

首先要知道是二進制按位移動,且用0補位。比如a=5<<1,就是a等於5左移1位,具體就是先把5換算成二進制0101,然後所有位左移一位,右邊用0補位,就變成了1010.

⑧ c/c++ 語言 左右移位操作

這是我學習位移時的筆記,很清楚。負數的位移是要看編譯器的。

7,左移運算符(<<)是雙目運算符,其功能是把"<<"運算符左邊的運算數的各二進位全部左移若干位,移動的位數由"<<" 運算符右邊的數指定,高位丟棄,低位補0。 如:a<<2 //代表a的二進數向左移動2位。
//實際上左移一位相當於該數乘以2,稱動2位 相當於該數乘以4,以此類推。這種情況只限於移動位不含1的情況。
8,右移運算符(>>)是雙目運算符,其功能是把">>"運算符左邊的運算數的各二進位全部右移若干位,移動的位數按">>" 運算符右邊的數指定。
//在進行右移時對於有符號的數需要注意符號問題,當為正數時,最高位補0,而為負數時,最高位補0或1取決於編譯 系統的規定,移入0的稱為"邏輯右移",移入1的稱為"算術右移"。(visualC++)是以算術右移。
循環移位
1,循環移位就是將移出的低位放到該數的高位或者移出高位放到該數的低位。
如:a.00110000,00000000,11010000,00001011 左循環移動4位
z.10110000,00000000,00000000,00000000 先左移32-4=28位後的結果。 公式為:z=a<<(32-n) //此時n=4
y.00001100.00000000,00001101.00000000 再右移4位的結果。 y=a>>n
a.10111100.00000000,00001101.00000000 這就是循環左移4位的結果。 a=z|y
2,右循環移動的方法類似,只需要轉換即可。

⑨ 單片機C語言右移指令怎麼用

用這種移位語句,就是這種結果。

你試試:_crol_()和_cror_()移位函數。

需要先加上頭文件:
#include<intrins.h>