运算符之位运算符


说明:位运算符都是作用在二进制上的

<< 左移

正数-负数

示例

比如 n = 50 ;
n << 1 结果是多少?100
n << 2 结果是多少? 200
n << 5 结果是多少? 1600

分析

为什么会是这样的呢?
运算的逻辑如下:
1,n = 50;
2,n的二进制是:0011 0010
3,0011 0010 左移一位 0110 0100;缺位补0或者1
4,然后再把0110 0100转成十进制结果为100
5,同理:<< 2,右移两位,<<5,右移五位

敲黑板:
n << 1 == n * 21
n << 5 == n * 25
n << a == n * 2a

>> 右移

正数

示例

比如 n = 50 ;
n >> 1 结果是多少?25
n >> 2 结果是多少?12
n >> 5 结果是多少?1

分析

为什么会是这样的呢?
运算的逻辑如下:
1,n=50;
2,n的二进制是:0011 0010
3,0011 0010 右移一位 000110 01 缺位补0
4,然后再把000110 01转成十进制结果为25
5,同理:>> 2,右移两位,>> 5,右移五位

敲黑板:
n >> 1 == n / 21
n >> 5 == n / 25
n >> a == n / 2a
注意:
n/2a 取整,这就是为什么n >> 2 == 12,n >> 2 != 12.5

负数

示例

比如 n = -50 ;
n >> 1 结果是多少?-25
n >> 2 结果是多少?-13
n >> 5 结果是多少?-2

分析

为什么会是这样的呢?
运算的逻辑如下:
1,首先要知道原码、反码和(补码 = 反码+1)
2,n = -50;
3,n的绝对值是 “50”
4,二进制:0000 0000 0000 0000 0000 0000 0011 0010;
5,反码是:1111 1111 1111 1111 1111 1111 1100 1101;
6,补码是:1111 1111 1111 1111 1111 1111 1100 1110;
7,同理:>> 2,右移两位,>> 5,右移五位,缺位补1
敲黑板:
n >> 1 == n / 21
n >> 5 == n / 25 -1
n >> a == n / 2a (-1)
注意:
n/2a 取整,如果有余数则再减一,且最小值只能为-1 这就是为什么 -50 >> 2 == -13,n >> 2 != -12

>>> 无符号右移

正数

和 >> 一样

负数

示例

比如 n = -50 ;
n >>> 1 结果是多少?2147483623
n >>> 2 结果是多少?1073741811
n >>> 5 结果是多少?134217726

分析

为什么会是这样的呢?
运算的逻辑如下:
1,首先要知道原码、反码和(补码 = 反码+1)
2,n = -50;
3,n的绝对值是 “50”,
4,二进制:0000 0000 0000 0000 0000 0000 0011 0010;
5,反码是:1111 1111 1111 1111 1111 1111 1100 1101;
6,补码是:1111 1111 1111 1111 1111 1111 1100 1110;
7,同理:>> 2,右移两位,>> 5,右移五位,缺位补0
8,神奇的时候出来了,这个缺位补了0,这个数字就变成了正整数了,所以一下子就变得很大
敲黑板:
敲不出来了
注意:
第八点很重要

| 或

示例-分析

比如 3|5 = 7
1,3的二进制:0011
2,5的二进制:0101
3,计算方式:同为0时为0,否则为1
4,结果就是:0111
5,转成十进制就是:7

^ 异或

示例-分析

比如 3^5 = 6
1,3的二进制:0011
2,5的二进制:0101
3,计算方式:相同则为0,不相同则为1
4,结果就是:0110
5,转成十进制就是:6

& 与

示例-分析

比如 -3& -5 = -12
1,-3的二进制:1111 1111 1111 1111 1111 1111 1111 1101
2,-10的二进制:1111 1111 1111 1111 1111 1111 1111 0110
3,计算方式:同为1时为1,否则为0
4,结果就是:1111 1111 1111 1111 1111 1111 1111 0100
5,转成十进制就是:-12

~ 非

示例-分析

比如 ~ -3 = 2
1,-3的二进制:1111 1111 1111 1111 1111 1111 1111 1101
2,计算方式:0转1,1转0
3,~-3的二进制:0000 0000 0000 0000 0000 0000 0000 0010
5,转成十进制就是:2

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值