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

 我来答
爱教育爱学习
高粉答主

2019-10-29 · 学而不思则罔,思而不学则殆
爱教育爱学习
采纳数:384 获赞数:112732

向TA提问 私信TA
展开全部

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

{

unsignedh=0;

while(*s!='\0'){

h=127*h+(unsignedchar)*s;

++s;

}

returnh;

}

splashchaos
推荐于2017-09-19 · TA获得超过1.1万个赞
知道大有可为答主
回答量:3342
采纳率:0%
帮助的人:3663万
展开全部
这句话的意思就是: 对一个数实施左移操作=对这个数×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.
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式