c语言左移位的问题求大神帮忙解释一下

2021-02-26 14:11:06 字数 4382 阅读 1473

1楼:丿心灬暖暖灬

左移一位后最右位bai补du0,移几位补几个0;

左移时最zhi高位在c里面丢dao

弃了。因为内汇编里面只

有两容种移位:不带cy的循环移位 和带cy的循环移位。cy是进位标志位

不带cy的循环移位是假设左移的话,是把最左位放到最右位了。

带cy的把最左位放进cy,cy的原值放最右位。

c语言的左移运算可以理解为先将cy置0,然后执行带cy的循环移位操作。移位后cy的值是原来的最左位,cy里的0被移到最右位

c语言 左移位的问题,求大神,帮忙解释一下!!!

2楼:风雷雪电

aa==0x12(0x表示十六进制,十六进制12,十进制是16+2==18),二进制0001 0010

左移3位,二进制1001 0000,十六进制0x90,十进制144。

左移4位,二进制0001 0010 0000,十六进制0x120,十进制288。

你确定是printf("%d\n",aa<<3);吗?可能是这个吧:printf("%x",aa<<3);,%x表示十六进制输出。

3楼:觉悟壮志

aa=0001`

0010(2).

aa<<3=000`1001`0000=90(10)(就是在后面填3个0,结果和输出一样)

aa<<4=0001`0010`0000=120(10)(也和输出一样)

楼上好像都不对

4楼:匿名用户

你说的也不对

aa为18

aa<<3,相当于乘8,显示144.

aa<<4,相当于乘16,显示288

我用c++builder6 试过了。

关于c语言左移/右移的问题 20

5楼:我瓦解的精彩

hbyte_later = hbyte << 8; //这里并没有使hbyte成为0!!而是hbyte_later=0

0100 1010 //这是4a的二进制

1000 0000 //这是80的二进制

4a左移8位

0100 1010 0000 0000 //对应的10进制值为18944,且80对应的10进制为127

/**18944+127为什么不能等于19072?

*/这次答题,这么用心,题主还是多给点分吧

c语言 左移 右移的问题 << 或 >>

6楼:匿名用户

左移 右移不会修改a本身

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

这个时候b=1100 1000 对

那么此时a=0011 0010

继续c=a<<2

请问c是在原来a的初值(ox32)上移动

这个时候c=1100 1000

7楼:围城

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

8楼:匿名用户

a << 2 是不影响a 的值的,就像a +1不会把a值加1一样 。

a << 2只是一个表达式,返回的是表达式计算得到的值,其中并没有赋值(‘=’)操作啊。

c语言左移问题

9楼:听不清啊

但左移复概念是左边去掉

制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,这就是溢出了。

10楼:匿名用户

这里存在一个溢出的问题,但如果不考虑溢出的问题,书上的结论说法没有问题。这就是理论与实现的差距,具体问题需要具体分析。

11楼:匿名用户

前提当然是不考虑溢出问题,一个字节根本不能表示超过255的数据,自然会溢出

c语言中左移运算符的问题

12楼:

void main()

void main()

13楼:朴丹樊鸟

a没有变啊,b=a

<<3的意思是把a左移后的结果赋值给b就像b

=a+3;

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

14楼:匿名用户

#include"stdio.h"

void main()

#include"stdio.h"

void main()

15楼:

char ch='e'; 十六进制0x65'e' 等于 二进制 0110 0101

ch=ch<<4;

左移4位 得 二进制 0101 0000

(高位0110 溢出, 自动丢失)

赋还到ch里.

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

void main()

c语言中,与2乘左移,与2除右移,这个是啥意思,求详细解释!!!

16楼:会飞的小兔子

对一个数实施左移操作=对这个数×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;}

17楼:匿名用户

这句话的意思就是: 对一个数

实施左移操作=对这个数×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语言左移

18楼:匿名用户

左移就是把二进制数向左移动,右边补0,0的二进制全是0,左移之后右边再补0,移5和移6没区别

《后面的数字表示移多少位

19楼:匿名用户

0<<5左移

5位,即000000

0<<6左移6位,即0000000

左移后是用二进制表示的,

具体的这个程序中有什么用,回应该看程序本身,就像#define pi_frmerr (0 << 5)用000000代替pi_frmerr可能与答某个数进行与操作或其他的。

c语言的问题跪求大神解释,C语言的一个问题 跪求大神解释

1楼 八进制转义字符 它是由反斜杠 和随后的1 3个八进制数字构成的字符序列。例如, 60 101 141 分别表示字符 0 a 和 a 。因为字符 0 a 和 a 的ascii码的八进制值分别为60 101和141。 字符集中的所有字符都可以用八进制转义字符表示。 如果你愿意,可以在八进制数字前面...

求C语言大神,帮忙解释一下这道题的选项,刚入门C语言

1楼 匿名用户 a选项2的二进制是010,5的二进制是101,所以2与5的结果是0,即条件为假,所以不能形成死循环 bwhile中是逗号表达式,取最后一个表达式3的值为真,所以是死循环 cd中 0 是字符的ascii值为0的转义字符,所以为假,不构成死循环条件 2楼 天云一号 a2 5 0 所以不会...

男是两个正财偏财还是四正财两偏财,婚姻如何是不是很容

1楼 合鱼命理张老师 这个八字年柱正财,日主少年时代家镜一般有,才被劫之像,时柱透财合日主,日主夫妻感情比较好,虽有偏财暗藏,有心无胆 2楼 匿名用户 是的,日干担财无力,财运也受一些影响 男命八字中有一个正财 一个偏财婚姻怎么样 3楼 金神临身 不错很好,家里红旗不倒,外彩旗飘飘。 4楼 匿名用户...