从逻辑、算数移位想到的问题

从数组循环移位那篇文章想到了移位的问题,想弄明白,于是乎产生了一下的联系:
1、逻辑移位和算数移位的区别?
2、在C语言中的移位运算符》和《是逻辑的还是算数的?
3、在不同的编译器下,存在差异吗?
4、如果存储的是一个二进制的数,例如0x11000,那么计算机是识别为正数12呢,还是负数-4呢?然后进行移位运算会得到什么结果呢?

第一个问题简略答案:

1)算术移位 当乘数或除数是2n时,算术移位用来快速地完成对整数进行乘法或除法的运算。算数左移n位相当于乘上2n,执行方法是把原来的数中每一位都向左移动n个位置,左面移出的高位丢弃不要,右面低位空出的位置上全部补0。
2)逻辑移位 逻辑左移n位的执行方法,是把原来的数中每一位都向左移动n个位置,左面移出的高位丢弃不要,右面低位空出的位置上全部补"0"。 逻辑右移n位的执行方法是把原来数中的每一位都向右移动n个位置,右面移出的低位丢弃不要,左面高位空出的位置上全部补0。
 

逻辑左移和算术左移无区别,统一功能的两种写法(相当于无符号数乘2)
右移有区别:算术右移最高位无变化(相当于有符号数除2)逻辑右移最高位 不管是什么都用0填充 (相当于无符号数除2)

第二个问题:
在C语言中,左移是逻辑/算术左移(两者完全相同),右移是算术右移,会保持符号位不变。

第三个问题:
我现在还不知道正确答案

第四个问题:
在C语言中,按照二进制的方式存储int型整数,一共是32位,如果没有写满32位,前面的自动填充为0,则为正数,否则如0x80000000,则为负数,而如0x11000则为整数,进行左移运算没有任何差别,对于右移运算进行的是算数右移。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值