c語言左移問題,C語言 左移 右移的問題 或

2021-03-11 08:10:14 字數 3236 閱讀 8032

1樓:聽不清啊

但左移復概念是左邊去掉

制n個二進位制位,右邊補n個零,但這是指原來的二進位制數是「機器數」。就是如果使用unsigned char 來儲存這個數的話,就是這樣的。

例如:0001 0010(十進位制為18)左移4位,

得到的應該是0010 0000(十進位制32),但是18*16≡32 (模256)

當左移左邊不去零,右邊單純補零的時候得到0001 0010 0000,這時候得到的恰好是

288=18*16,但這只是單純往左移了(「丟失」了移出的4位)

如果仍是儲存在unsigned char 中的話,就仍是0010 0000(十進位制32)

用左移的時候194<<4,是1100 0010 0000,若仍是儲存在unsigned char 中的話,就仍是0010 0000,這就是溢位了。

2樓:匿名使用者

這裡存在一個溢位的問題,但如果不考慮溢位的問題,書上的結論說法沒有問題。這就是理論與實現的差距,具體問題需要具體分析。

3樓:匿名使用者

前提當然是不考慮溢位問題,一個位元組根本不能表示超過255的資料,自然會溢位

c語言 左移 右移的問題 << 或 >>

4樓:匿名使用者

左移 右移不會修改a本身

a=ox32 (16進位制) 0011 0010b=a<<2

這個時候b=1100 1000 對

那麼此時a=0011 0010

繼續c=a<<2

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

這個時候c=1100 1000

5樓:圍城

b=a<<2

這個時候b=1100 1000 對!

那麼此時a=0011 0010 沒變

接著c=a<<2

c是在原來a的初值上移動,因為a沒變

c=b=1100 1000

最後c=b=1100 1000

a=0011 0010

6樓:匿名使用者

a << 2 是不影響a 的值的,就像a +1不會把a值加1一樣 。

a << 2只是一個表示式,返回的是表示式計算得到的值,其中並沒有賦值(『=』)操作啊。

c語言中左移運算子的問題

7樓:

void main()

void main()

8樓:樸丹樊鳥

a沒有變啊,b=a

<<3的意思是把a左移後的結果賦值給b就像b

=a+3;

b的值是a+3但是a本身沒有加3的!

9樓:匿名使用者

#include"stdio.h"

void main()

#include"stdio.h"

void main()

10樓:

char ch='e'; 十六進位制0x65'e' 等於 二進位制 0110 0101

ch=ch<<4;

左移4位 得 二進位制 0101 0000

(高位0110 溢位, 自動丟失)

賦還到ch裡.

二進位制 0101 0000 是 p, 十六進位制 0x50#include

void main()

c語言左移

11樓:匿名使用者

左移就是把二進位制數向左移動,右邊補0,0的二進位制全是0,左移之後右邊再補0,移5和移6沒區別

《後面的數字表示移多少位

12樓:匿名使用者

0<<5左移

5位,即000000

0<<6左移6位,即0000000

左移後是用二進位制表示的,

具體的這個程式中有什麼用,迴應該看程式本身,就像#define pi_frmerr (0 << 5)用000000代替pi_frmerr可能與答某個數進行與操作或其他的。

c語言按位左移運算規則

13樓:匿名使用者

c語言中按位左移的運算子為<<,其規則如下:

對於操作a<1 按照二進位制值每位向高位(書寫上是向左)移動n位;

2 最高位(最左邊的)n位捨去;

3 最低位(最右邊)填加n個0.

簡單起見,用char型舉例如下:

例一0x12 << 3 =>

b00010010 << 3 =>

b10010 000(這裡最高位的三個0被捨去,其它依次左移,最低位補三個0) =>

0x90

即0x12 << 3 = 0x90

例二0x9e << 2 =>

b10011110 << 2 =>

b01111000 (最高位10捨去,最低位補兩個0)=>0x78

可以編寫如下程式驗證:

#include

void check(char a, int n){printf("0x%hhx << %d = 0x%hhx\n", a, n, a<

其執行結果為

0x12 << 3 = 0x90

0x9e << 2 = 0x78

可以看到與我們計算結果是相符的。

14樓:

左移一位後最右位補0,移幾位補幾個0;

左移時最高位在c裡面丟棄了。

因為彙編裡面只有兩種移位:不帶cy的迴圈移位 和帶cy的迴圈移位。cy是進位標誌位

不帶cy的迴圈移位是假設左移的話,是把最左位放到最右位了。

帶cy的把最左位放進cy,cy的原值放最右位。

c語言的左移運算可以理解為先將cy置0,然後執行帶cy的迴圈移位操作。移位後cy的值是原來的最左位,cy裡的0被移到最右位

15樓:匿名使用者

<<1 相當於 乘2的1次方

從二進位制來講就是,所有位都向左移一位再在末尾加上一個0.

16樓:匿名使用者

樓上說得對,我再補充下

如果你想移位時最高位不丟棄,比如100,移位成001

那就得先把最高位的狀態儲存到某個變數中,然後再儲存回最低位

17樓:匿名使用者

最高位丟棄

移動n位補n個零,相當於乘以2的n次方

c語言按位左移運算規則C語言按位左移運算規則

c語言中按位左移的運算子為 其規則如下 對於操作a 1 按照二進位制值每位向高位 書寫上是向左 移動n位 2 最高位 最左邊的 n位捨去 3 最低位 最右邊 填加n個0.簡單起見,用char型舉例如下 例一0x12 3 b00010010 3 b10010 000 這裡最高位的三個0被捨去,其它依次...

c語言問題,C語言問題?

include include int main max min i 0 sum i 0 i 1 i 2 i 3 i 4 i 5 i 6 for j 0 j 6 j printf 去掉一個最高分 0.6lf max printf 去掉一個最低分 0.6lf n min printf 該選手最後的得分...

c語言問題,C語言問題?

char的範圍是 128 127的 你362就溢位了嘛 是這樣的 0362 0是表示8進位制 於是362在10進位制下是242 242溢位了 128 127 於是結果變成242 128 128 14 要明白這個,首先要明白記憶體中 c 變數是什麼樣子的。整數在記憶體中是以補碼的形式存取的。c 036...