hello hello,想我了吗?
😄😄😄
首先是移位操作符:<< 左移操作符 >> 右移操作符
<< 左移操作符:移位规则: 左边抛弃、右边补0
为什么等于20呢?我们来见分晓: 在内存中我们的CPU都是以补码进行计算
00000000000000000000000000001010 --m的原码(10) 正数的 原 反 补码相同;
00000000000000000000000000010100 --左移后--20
就是向左移一位,左边的抛弃掉,右边的补上0,0010100就是20咯!
>> 右移操作符:首先右移运算分两种:
为什么等于5呢我们来见分晓:
00000000000000000000000000001010 --m的原码(10)
00000000000000000000000000000101 --右移位后 m的原码 0101呢就是我们的5啦
位操作符:
& //按位与 :只要有0就为0,两个同时为1才为1
10000000000000000000000000000011 -- -3的原码
11111111111111111111111111111100 -- -3的反码
11111111111111111111111111111101 -- -3的补码
00000000000000000000000000000100 -- 4的原码(补码)
//两数按位与 &
11111111111111111111111111111101 -- -3的补码
00000000000000000000000000000100 -- 4的原码(补码)
00000000000000000000000000000100 -- 是一个正数,那么这个补码就是原码咯,那么就是我们的数字4咯
| //按位或 :只要有1就是1,两个同时为0才为0
10000000000000000000000000000011 -- -3的原码
11111111111111111111111111111100 -- -3的反码
11111111111111111111111111111101 -- -3的补码
00000000000000000000000000000100 -- 4的原码(补码)
两数按位或 |
11111111111111111111111111111101 -- -3的补码
00000000000000000000000000000100 -- 4的原码(补码)
11111111111111111111111111111101 -- 此时是一位负数的补码,我们要把它转换为原码!
补码->原码 取反后加一
10000000000000000000000000000010 -- 取反
10000000000000000000000000000011 -- 原码 -- 前面是1后面是0011 那就是我们的-3咯
^ //按位异或:相同为0,相异为1
10000000000000000000000000000011 -- -3的原码
11111111111111111111111111111100 -- -3的反码
11111111111111111111111111111101 -- -3的补码
00000000000000000000000000000100 -- 4的原码(补码)
两数按位异或 ^
11111111111111111111111111111101 -- -3的补码
00000000000000000000000000000100 -- 4的原码(补码)
11111111111111111111111111111001 -- 此时是一位负数的补码,我们要把它转换为原码!
补码->原码 取反后加一
10000000000000000000000000000110 -- 取反
10000000000000000000000000000111 -- 原码 -- 前面是1后面是0111 那就是我们的-7咯
注:取反的时候符号位不变。
下面来分享一道题,不能创建临时变量(第三个变量),实现两个整数的交换。
怎样做这道题呢,其实这时候就可以用到我们的按位异或^。
你知道其中的奥秘吗?