永发信息网

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

答案:6  悬赏:60  手机版
解决时间 2021-11-24 07:47
C语言中 移位左移和循环左移,有区别吗
最佳答案
在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,也就是汇编语言中的算术右移.同样当移动的位数超过类型的长度时,会取余数,然后移动余数个位.
全部回答
有!
有的
比方说一个btye里面存着下列数据11010101
位置左移则最右边补个0为10101010
循环左移是把最左边的1挪动到右边去,依次循环下去
移位左移就是在二进制数的左侧补0,补多少个0,右侧就去除几位。循环左移不用去除
首先说这不是C语言吧
应该说是汇编语言
比方说一个btye里面存着下列数据11010101
位置左移则最右边补个0为10101010
循环左移是把最左边的1挪动到右边去(或者CF中)
如果不考虑CF则为10101011
考虑CF
CF=1时候10101011
CF=0时候10101010
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
剑桥郡停车场(张衡路与车站北路交叉口东北200
疏水阀代号解释标准哪里有?S21R-J190 DN15 S
圣经中几个被神大大使用的女人
OPPO A59s这款手机怎么样,值得买吗,有哪些
锁车后人在车里怎么打开
事业单位购买窗帘计入什么科目
骑士造型地址在什么地方,我要处理点事!
农行为啥不给提额
最近搞了辆电摩.不知道弄2个触犯法律吗
大众tsi原厂白桶机油可以一年一换吗
对比泰国试管婴儿的费用,高低差距为什么这么
独木成森,径自葳蕤 是什么意思?求教。
剑杆织机改装收卷的整套配件,伺服驱动十伺服
微信个人的二维码,是不是一个账号个人的二维
叶剑英简历是叶挺的儿子吗?
推荐资讯
停车场(工业北路)(工业北路1597号附近停车场)
反渗透和超滤分离过程中浓差极化导致通量降低
车头村地址在哪,我要去那里办事,
嘉兴幸福家园是属于南湖还是属于秀洲
5的1/2次方怎么求
富街社区居委会地址好找么,我有些事要过去,
国珍的制度是双轨制吗
PS,AI,CDR三大软件互换所用的常用格式
求编写一个Java程序 初级的
NBA球星卡梅隆安东尼的老婆拉拉瓦奎兹身高多
用正确的介词填空
一台三菱fx3u-80m的plc可以带几个输入扩展模
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?