位运算的详细过程

                                                                                        位运算符 

运算符

运算

范例

<<

左移

3<<2=12à3*2*2=12

>>

右移

3>>1=1à3/2=1

>>>

无符号右移

3>>>1=1à3/2=1

&

与运算

6&3=2

|

或运算

6|3=7

^

异或运算

6^3=5

~

反码

~6=7

       位运算是直接对二进制运算

       既然是位运算,数据都要以二进制表示,且以其补码表示 

1.与运算----&    有0则0

     

例子:3&4=0

 

分析:

3的二进制补码为: 00000000  00000000  00000000  00000011

4的二进制补码为: 00000000  00000000  00000000  00000100

 

   00000000  00000000  00000000  00000011

   00000000  00000000  00000000  00000100    

-----------------------------------------------------------------

   00000000  00000000  00000000  00000000

    结果是0

 

 

   2.或运算----|         有1则1

例子  3|4 =7

 

分析:

3的二进制补码为: 00000000  00000000  00000000  00000011

4的二进制补码为: 00000000  00000000  00000000  00000100

 

 00000000  00000000  00000000  00000011

 00000000  00000000  00000000  00000100

------------------------------------------------------------------

  00000000  00000000  00000000  00000111

结果是7

 

 

   3.异或运算----^      相同则0,不同则1

例子:3^4=7   

 

分析:

3的二进制补码为: 00000000  00000000  00000000  00000011

4的二进制补码为: 00000000  00000000  00000000  00000100

 

00000000  00000000  00000000  00000011

00000000  00000000  00000000  00000100

--------------------------------------------------------------

00000000  00000000  00000000  00000111

结果是7

异或运算的特点:一个数据对另一个数据异或两次,该数本身不变。

 

4.按位取反运算符----~    0变1  ,  1变0

例子: ~3=-4

 

分析:

3的二进制补码为: 00000000  00000000  00000000  00000011

 

00000000  00000000  00000000  00000011

~ 11111111  11111111  11111111  11111100(都是补码)

但我们看到的都是原码的十进制表示,所以先将其转化为原码,再计算出其十进制

补码:11111111  11111111  11111111  11111100

反码:11111111  11111111  11111111  11111011

原码:10000000  00000000  00000000  00000100

结果是-4

 

5.左移运算符----<<   左边最高位丢弃,右边补齐0

 

例子:  3<<2=12

       -3<<2=-12

 

分析:

3<<2=12

3的二进制补码为:  00000000  00000000  00000000  00000011

 

         00000000  00000000  00000000  00000011

(00)000000  00000000  00000000  0000001100

   结果是12

 

 

-3<<2=-12

-3的二进制原码为: 10000000  00000000  00000000  00000011

-3的二进制反码为: 11111111  11111111  11111111  11111100

-3的二进制补码为: 11111111  11111111  11111111  11111101

 

               11111111  11111111  11111111  11111101

         (11)111111  11111111  11111111  1111110100

 

补码为:111111  11111111  11111111  1111110100

反码为:111111  11111111  11111111  1111110011

原码为:100000  00000000  00000000  0000001100

结果是 -12

 

简便计算方法:把<<左边的数据*2的移动次幂

3<<2  --->  3*2^2=12

 

6.右移运算符---->>    如果最高位是0左边补齐0 , 如果最高位是1左边补齐1

 

例子:  24>>2=6

       -24>>2=-6

 

分析:

 

A:

24>>2=6

24的二进制补码为: 00000000  00000000  00000000  00011000

 

               00000000  00000000  00000000  00011000

               0000000000  00000000  00000000  000110(00)

         结果是6

 

 

    B:

-24>>2=-6

-24的二进制原码为: 00000000  00000000  00000000  00011000

-24的二进制反码为: 11111111  11111111  11111111  11100111

-24的二进制反码为: 11111111  11111111  11111111  11101000

  

               11111111  11111111  11111111  11101000

               1111111111  11111111  11111111  111010(00)

 

补码为: 1111111111  11111111  11111111  111010

反码为: 1111111111  11111111  11111111  111001

原码为: 1000000000  00000000  00000000  000110

结果是 -6

简便计算方法:把>>左边的数据 / 2的移动次幂

24>>2  --->  24/(2^2)=6

 

7.无符号右移---->>>   无论最高位是0还是1,左边补齐0

 

例子  24>>>2=6

     -24>>>2=6

 

分析:

 

A:

24>>>2=6

24的二进制补码为: 00000000  00000000  00000000  00011000

 

               00000000  00000000  00000000  00011000

             0000000000  00000000  00000000  000110(00)

         结果是6

 

 

B:

-24>>>2=6

-24的二进制原码为: 00000000  00000000  00000000  00011000

-24的二进制反码为: 11111111  11111111  11111111  11100111

-24的二进制反码为: 11111111  11111111  11111111  11101000

  

              11111111  11111111  11111111  11101000

               0011111111  11111111  11111111  111010(00)

 

补码是0011111111  11111111  11111111  111010,

表示是正数,其原码反码补码都相同

原码是 0011111111  11111111  11111111  111010

结果是 1073741818

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值