黑马程序员_位运算符的应用

本文深入解析位运算符在计算2*8的高效方式,并介绍两种整数互换方法:通过中间变量交换和利用异或运算实现。同时解释了左移、右移操作符的用法及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------- android培训java培训、期待与您交流! ----------

此次,通过两道练习题来了解一下位运算符。

1、最有效率的算出2*8的值。

2、对两个整数变量的值进行互换。

……………………………………………………………………

1、2*8的值可通过*直接得出,代码如下:

 

class Operate { public static void main(String[] args) { int sum; sum = 2*8; System.out.println("2*8="+sum); } }

 
然而,这样的效率并不是最有效率的,电脑中CPU运行都是计算而二进制,使用位运算符“>>”直接进行移位运算是最有效率的,代码如下:

class Operate { public static void main(String[] args) { int sum; sum = 2<<3; System.out.println("2*8="+sum); } }

 
             
2<<3,即2左移3位,也就是2*2^3,从而得出2*8的值。
如果是2>>1,就相当于2/2^1,也就是1.因为元素均为整形,因此如果是6>>2,那么结果就是1了,因为6/4,取整的缘故。
右移分为“>>”、“>>>”两种,>>进行移位时,左边的空位依据最高位进行0或1.如果是负数,就补1,;若是正数,就补0.而对于>>>,无论正负,左边空位一律补0。
……………………………………………………………………
2、对两个整数的值进行互换,方法有许多。
(1)通过中间值进行互换,代码如下:

class Swap1 {  public static void main(String[] args)  {   int x = 1, y = 6;   System.out.println("x="+x+",y="+y);   int tmp;      tmp = x;   x = y;   y = tmp;   System.out.println("x="+x+",y="+y);  } }

此方法是最常见的方法,思路简单,常用于软件开发中。
(2)通过+、-进行互换,代码如下:

class Swap2 {  public static void main(String[] args)  {   int x = 1, y = 6;   System.out.println("x="+x+",y="+y);        x = x+y;   y = x-y;   x = x-y;   System.out.println("x="+x+",y="+y);  } }

此方法较为巧妙,避免了第3变量,但是当x、y很大时,x+y可能会出现损失精度。
(3)通过异或运算“^”进行互换,代码如下:

class Swap3 {  public static void main(String[] args)  {   int x = 1, y = 6;   System.out.println("x="+x+",y="+y);        x = x^y;   y = x^y;//x^y^y=x   x = x^y;//x^y^x=y   System.out.println("x="+x+",y="+y);  } }

原理为x^y^y=x,此原理常用于加密中。
异或(^)运算过程如下:
x=1:0001   y=6:0110
x^y=
 0001
^0110
------
 0111
x^y^y=
 0111
^0110
------
 0001 = x
 


----------- android培训java培训、期待与您交流! --------------   

详细请查看:http://edu.youkuaiyun.com/heima/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值