阿抗

导航

位运算


位运算:

  注意的规则:
    01.整数的 三个码都是一致的,不需要转换
    02.负数必须转换成补码才能运算!
    03.计算机真正参与运算的是 补码!
    04.在java中所有的数字都是有符号的! 符号位 0 正数 1负数
    05.符号位就是最高位也是最左边的一位!
    06.负数的反码=符号位不变+其他位取反(1变0 0变1)
    07.负数的补码=反码+1 

 

算术的右移 和 算术 左移
  算术的右移:
    01.符号位不变
    02.低位溢出删除
    03.高位补零!

 1 10 >> 1 10的2进制数字 右移一位
 2 
 3 >>:位移的方向
 4 1 :位移的位数
 5 
 6 首先找到10的2进制
 7 
 8 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 ====》10的2进制
 9 >>1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 ====》右移1位的结果
10 ==================================================================
11 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 ==》5
12 
13 
14 -1 >> 1
15 首先找到-1的2进制
16 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ==>-1的2进制 原码
17 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 ==>-1的2进制 反码
18 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ==>-1的2进制 补码 
19 >> 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
20 ================================================================
21 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ===》-1的补码
22 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 ===》-1的反码
23 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ===》原码 -1
24 
25  

  算数左移:
    01.符号位不变
    02.高位溢出删除
    03.低位补零!

1 << 4

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ===》1的补码
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 
========================================================================
0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 ==>结果16

  逻辑右移, 没有逻辑左移! >>>
    01.不管符号位;
    02.地位溢出删除;
    03.高位补0

-1 >>> 1 -1逻辑右移1位

1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ===》-1的原码
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 ===》-1的反码
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ===》-1的补码
>>> 1============================================================ 
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ===》-1的逻辑右移1位

2147483647 int类型的最大值

位运算: &  |    ^  ~

  01. & 按位与 :两位都是1,结果是1

3&4

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

  02.| 按位或 :两位有一位是1,结果是1

3|4

0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 
| 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 
===========================================
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1

  03.^ 按位异或 :两位必须是一个为0,一个为1,结果才是1

3^4

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

  04.~ 按位取反,只能是一个表达式使用
    正数的按位取反= 自身的负数 -1
    负数的按位取反= 自身的绝对值 -1

 

    ~x   =====>    - (x+1)

~3   =====>    -4

0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 
~ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 ==》结果的补码
==================================================== 
1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 ==》结果的反码
1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 ==》结果的原码
======================================================= 
-4

 

posted on 2017-12-27 12:21  阿抗  阅读(150)  评论(0编辑  收藏  举报