C語言中的右移一位是不是應該除以

2021-03-10 20:04:23 字數 4641 閱讀 8852

1樓:非常可愛

右移一來位相當於除以2。

例:5>>1

5的二自進bai制表示是101,那麼右移一位之du後是zhi10就是2了,是整除的;左移的dao話就是在後面補乙個零,相當於是乘以二,那麼變成了1010,十進位制是10。

101右移,就是把最後一位拿掉了,是10這個是二進位制的,十進是2,5/2本來是小數,但這裡是整數操作的,所以把小數部分去掉了。

擴充套件資料

c語言中的左移

1、左移就是把乙個數的所有位都向左移動若干位,在c中用《運算子.例如:

inti=1;

i=i<<2;//把i裡的值左移2位。

2、補符號位,就是乙個signedchara=0xff;

a=a>>1;/*它仍是0xff,補了符號位。最高位是符號位=1,右移後符號位保持不變*/;

a=0x80;

a=a>>1;/*變成了0xc0*/

a=0x1f;

a=a>>1;/*變成了0x0f,因為它開始的符號位就是0*/。

2樓:幸巴達

(usartdiv - usartdiv_zhengshu)* 16相當bai於(usartdiv - usartdiv_zhengshu)<<4

左移du4位。

你理zhi解的是

dao對的。貌似是專寫**錯了

右移一位屬相當於除以2.

3樓:匿名使用者

不是c語言的有符號整數向右移位運算不等同於除以2的某次冪

如(-1)/2和(-1)>>1,前者的回結果一般答是0,後者一般是-1,所以在c語言中,負數向右移動1位並不等同於除以2。

解決的方法是:當除數是2的n次冪時,x/(2^n),可以用移位操作(x + 2^n - 1) >> n來代替(x + 2^n - 1須小於0,^是乘方操作)

在c語言中,-100/8=-12,而-100>>3=-13,兩者不相等,而用(-100+7)>>3代替則相等。

在c語言中,負數向右移動1位也算是除以2嗎

4樓:聽不清啊

在c語言中,負的偶數向右移動1位也是除以2,負的奇數向右移動1位等於此數除以2,再減1。

5樓:

正數向右移動會小於原數,可能是負數並且帶126這三數字

c語言中的右移一位是不是應該除以2?

6樓:匿名使用者

不是c語言的有符號整數向右移位運算不等同於除以2的某次冪如(-1)/2和(-1)>>1,前者的結果一般是0,後者一般是-1,所以在c語言中,負數向右移動1位並不等同於除以2。

解決的方法是:當除數是2的n次冪時,x/(2^n),可以用移位操作(x + 2^n - 1) >> n來代替(x + 2^n - 1須小於0,^是乘方操作)

在c語言中,-100/8=-12,而-100>>3=-13,兩者不相等,而用(-100+7)>>3代替則相等。

c語言中右移n位,相當於除以2的n次方。 1:如果右移被遺棄的是1,結論也成立嗎? 2:不管邏輯右

7樓:風裡的麥田

指標移動是以位元組為單位的,乙個位元組有8位,指標移動跟算術的關係不大。我也剛學c語言,我是這樣理解的,不知道對不對

c語言中,與2乘左移,與2除右移,這個是啥意思,求詳細解釋!!!

8樓:會飛的小兔子

對乙個數實施左移操作=對這個數×2;對乙個數實施右移操作=對這個數÷2。

a=ox32(16進製制)00110010

b=a<<2

這個時候b=11001000對

那麼此時a=00110010

繼續c=a<<2

請問c是在原來a的初值(ox32)上移動

這個時候c=11001000

乙個十進位制的數,在電腦中都可以按二進位制表示。例如:數字8,二進位制就是1000.

左移一位,1000<<1=00010000=16,因此就是=8×2;同理右移一位,1000>>1=0100=4,就是8÷2。

擴充套件資料c語言中移位代替乘除

unsignedinthash(charconst*s)returnh;}

9樓:匿名使用者

這句話的意思就是: 對乙個數

實施左移操作=對這個數×2; 對乙個數實施右移操作=對這個數÷2。

這個是計算機基本的二進位制操作,因此不僅僅侷限於c語言, 事實上絕大多數計算機程式語言都支援這個操作。

理解很容易:

乙個(十進位制的)數,在電腦裡面都可以按二進位制表示。 比如數字8, 二進位制就是1000. 左移一位,1000 << 1 = 0001 0000 = 16, 因此就是=8×2;同理右移一位, 1000 >> 1 = 0100 = 4, 就是8÷2.

乙個十進位制a(這裡先以正整數為例說明), 總可以表示成: a = a[n-1]*2^(n-1)+a[n-2]*2(n-2) + .... a[1]*2^1 + a[0]+2^0; 這裡a[n-1]....

a[0]的取值範圍就是0或1,就是乙個二進位制數各個位上權係數。 假設a[i] << k; a[i] -> a[i+k]; 它對整個數的貢獻值,從2^i -> 2^(i+k) = 2^i × 2^k, 二進位制的每一位都這樣操作,因此這個數就被放大了2^k倍。當k=1的時候,就是×2;同理右移就是÷2^k.

c語言問題,在位運算中,運算元每右移一位,其結果相當於什麼?若左移1位,其結果相當於什麼?

10樓:非常可愛

1、右移,除以2右移n位除以2的n次方;

右移的概念和左移相反,就是往右邊挪動若干位,運算子是》;

右移對符號位的處理和左移不同,對於有符號整數來說,比如int型別,右移會保持符號位不變,例如:

inti=0x80000000;

i=i>>1;//i的值不會變成0x40000000,而會變成0xc0000000

2、左移,乘以2左移n位乘以2的n次方;

先說左移,左移就是把乙個數的所有位都向左移動若干位,在c中用《運算子。例如:inti=1;

i=i<<2;//把i裡的值左移2位

左移就是:丟棄最高位,0補最低位

擴充套件資料

符號位向右移動後,正數的話補0,負數補1,也就是組合語言中的算術右移。同樣當移動的位數超過型別的長度時,會取餘數,然後移動餘數個位。

負數10100110>>5(假設字長為8位),則得到的是11111101

在c中,左移是邏輯/算術左移(兩者完全相同),右移是算術右移,會保持符號位不變。實際應用中可以根據情況用左/右移做快速的乘/除運算,這樣會比迴圈效率高很多。

11樓:多xdl點事

每右移一位就是除以2,左移一位就是乘以2。c語言中,數字是二進位制儲存的,左移和右移就是變化為2的指數形式。

演示**:

#include

int main()

程式執行結果:

擴充套件程式c語言中,移位運算子組成的表示式也屬於算術表示式,其值為算術值。左移運算是將乙個二進位制位的運算元按指定移動的位數向左移動,移出位被丟棄,右邊移出的空位一律補0。

右移運算是將乙個二進位制位的運算元按指定移動的位數向右移動,移出位被丟棄,左邊移出的空位一律補0,或者補符號位,這由不同的機器而定。在使用補碼作為機器數的機器中,正數的符號位為0,負數的符號位為1。

12樓:匿名使用者

左移乘二,右移除以2,都是整除,比如5>>15的二進位制表示是101

那麼右移一位之後是10就是2了,是整除的

左移的話就是在後面補乙個零,相當於是乘以二那麼變成了1010,十進位制是10

13樓:匿名使用者

c語言問題,在位運算中,運算元每右移一位,其結果相當將左值除以2

若左移1位,其結果相當於將左值乘以2

14樓:

右移,除以2

左移,乘以2

15樓:rr子騰

左移n位運算元乘以2的n次方冪

右移n位運算元除以2的n次方冪

16樓:匿名使用者

10000001 <<1 ==>1000 0010 相當於指數加1

c語言 2右移一位為什麼還是2,2不是10麼?右移一位不應該變成01麼?

17樓:lq君羊

別費嘛反正有關不掉問題

不如採納我的算啦,嘿嘿

int x=12;【x>>1;】為什麼說x的值被右移了一位,「相當於除以2」?。。。

18樓:匿名使用者

x>>1這個是c語言中的按位操作! 二進位制中,進製是滿2進1 所以,右移一位就是除以2!

19樓:匿名使用者

2進製運算,所以除以2,右移2位 相當於除以 2*2=4

C語言中bool是佔用節嗎?如果只佔用一位怎麼做呢

幻翼高達 需要準備的材料分別有 電腦 c語言編譯器。1 首先,開啟c語言編譯器,新建一個初始.cpp檔案,例如 test.cpp。2 在test.cpp檔案中,輸入c語言 bool a printf d sizeof a 3 編譯器執行test.cpp檔案,此時成功列印出了bool型別的位元組數是1...

c語言位運算,怎樣修改每一位的值呢

ch 1 3 1左移3位 再和ch按位或就好了拉 要置0的話 就 ch 1 3 就三種情況,以單位元組為例說明 將某一位置1,無論原來是0是1,操作後肯定是1,按位或 即操作符 乙個該位為1,其餘位為0的單位元組數。如a 00001000,b 000000010,則a b 00001010,即把第1...

C語言中的常量是怎麼使用的,是不是通過巨集定義常量啊

對的!專家的推薦是這樣的 1,對於數值和字元常量,用 define,注意新增必要注釋 版2,對於其它權 型別常量,用 const 限定符。const 和 define 的區別在於1 const 像變數一樣有範圍 作用域 可見性等限制,一般來說好一點 2 define常常出現意料之外的事情,因為他是靠...