C语言中 移位左移和循环左移,有区别吗

 我来答
盛晚竹陀赋
2019-12-30 · TA获得超过3.8万个赞
知道大有可为答主
回答量:1.3万
采纳率:34%
帮助的人:962万
展开全部
在C中,左移是逻辑算术,右移是算术右移,会保持符号位不变.
  实际应用中可以根据情况用左/右移做快速的乘/除运算,这样会比循环效率高很多.
  1、左移就是把一个数的所有位都向左移动若干位,在C中用<<运算符.例如:
int
i
=
1;
i
=
i
<<
2;
//把i里的值左移2位
也就是说,1的2进制是000...0001(这里1前面0的个数和int的位数有关,32位机器,gcc里有31个0),左移2位之后变成
000...0100,也就是10进制的4,所以说左移1位相当于乘以2,那么左移n位就是乘以2的n次方了。
  2、右移对符号位的处理和左移不同,对于有符号整数来说,比如int类型,右移会保持符号位不变,例如:
int
i
=
0x80000000;
i
=
i
>>
1;
//i的值不会变成0x40000000,而会变成0xc0000000
就是说,符号位向右移动后,正数的话补0,负数补1,也就是汇编语言中的算术右移.同样当移动的位数超过类型的长度时,会取余数,然后移动余数个位.
严春叔桥
2019-10-14 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.3万
采纳率:31%
帮助的人:871万
展开全部
移位左移就是在二进制数的左侧补0,补多少个0,右侧就去除几位。循环左移不用去除
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
考长青兆绫
2019-09-04 · TA获得超过3.6万个赞
知道小有建树答主
回答量:1.3万
采纳率:27%
帮助的人:674万
展开全部
首先说这不是C语言吧
应该说是汇编语言
比方说一个btye里面存着下列数据11010101
位置左移则最右边补个0为10101010
循环左移是把最左边的1挪动到右边去(或者CF中)
如果不考虑CF则为10101011
考虑CF
CF=1时候10101011
CF=0时候10101010
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
辛淑兰充巳
2019-12-22 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.3万
采纳率:31%
帮助的人:756万
展开全部
比方说一个btye里面存着下列数据11010101
位置左移则最右边补个0为10101010
循环左移是把最左边的1挪动到右边去,依次循环下去
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式