位运算符

 我来答
科创17
2022-07-22 · TA获得超过5914个赞
知道小有建树答主
回答量:2846
采纳率:100%
帮助的人:176万
展开全部

21(十进制整数)

21 << 2 = ?

首先将21转换位二进制

10101 向左移两位,空出位置补0 于是变成了

1010100 转为十进制:1 * 2 2 + 1 * 2 4 + 1 * 2 6 = 84

所以 21 << 2 = 84

总结: 每向左移一位相当于在原来数上的基础乘以2,即 21 * 2 n ,n为向左移位数

举例说明:

10101 = 1 * 2 0 + 1 * 2 2 + 1 * 2 4

21(十进制整数)

21 >> 2 = ?

首先将21转换位二进制

10101向右移两位,前方位置补零于是变成了

00101 转为十进制:1 * 2 0 + 1 * 2 2 = 5

所以 21 >> 2 = 5

总结:每向右移一位相当于在原来数上的基础除以2,即 21 / 2 n ,n为向右移位数

推导过程:

10101 = 1 * 2 0 + 1 * 2 2 + 1 * 2 4

位运算符的效率高于算术运算符。

经典面试题:

最高效的方式计算 2 * 8 ?

答: 2 << 3 或 8 << 1

12 & 5 = 4

过程

12 => 1100(二进制)

5 => 0101(二进制)

比较过程:

0 & 1 = 0; 0 & 0 = 0 ; 1 & 1 = 1; 1 & 0 = 0

结果为 0100(二进制) => 4 (十进制)

总结:只有当比较双方都为1时,结果才为1,,否则为0

12 | 5 = 4

过程

12 => 1100(二进制)

5 => 0101(二进制)

比较过程:

0 | 1 = 1; 0 & 0 = 0 ; 1 & 1 = 1; 1 & 0 = 1

结果为: 1101(二进制) => 13(十进制)

总结:当比较双方只要有一个为1,那么其值为1,否则为0

12 ^ 5 = 4

过程

12 => 1100(二进制)

5 => 0101(二进制)

比较过程:

0 ^ 1 = 1; 0 ^ 0 = 0 ; 1 ^ 1 = 0; 1 ^ 0 = 1

结果为:1001(二进制) => 9 (十进制)

总结:当比较双方都为异(值不同)时,才等于1,否则为0

~6 = -1

过程

6 => 0110(二进制)

包括符号位在内的所有数取反

即变为1001 => -7

注意:要将二进制码转换为补码才能进行取反,取反包括符号位

图片部分来自网络引用,如有侵犯请联系作者删除

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式