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...