黑马程序员_位运算符的应用
来源:互联网 发布:网络搞笑猛虎下山图 编辑:程序博客网 时间:2024/05/28 05:15
------- 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:0110x^y=0001^0110------0111x^y^y=0111^0110------0001 = x
----------- android培训、java培训、期待与您交流! --------------
详细请查看:http://edu.csdn.net/heima/
- 黑马程序员_位运算符的应用
- 黑马程序员_位运算符的用法
- 黑马程序员_位运算
- 黑马程序员_关于C#中的位运算符
- 黑马程序员_java入门_位运算
- 黑马程序员-位运算符
- 黑马程序员_04_算术_转移_逻辑_位_三元_运算符_判断语句
- 黑马程序员_运算符
- 黑马程序员—位运算符练习 位移的应用 十进制转十六进制 及三元运算符
- 黑马程序员——位运算符
- 黑马程序员_数据类型及运算符
- 黑马程序员_重载运算符
- 黑马程序员_面向对象的应用
- 黑马程序员_并发库的应用
- 黑马程序员_反射的应用
- 黑马程序员_反射的应用
- 位运算符的应用
- 黑马程序员--java基础——位运算符
- 【Python】pip - 安装第三方包的神器
- blktrace 深度了解linux系统的IO运作
- 黑马程序员_多线程与死锁
- 配置Apache服务器
- json字符串在javascript和java代码中的表示方式
- 黑马程序员_位运算符的应用
- 收集一些画图方面的js库
- 【Android】注解使用注意事项
- UFT的使用
- LGame学习笔记2-----使用Sprite类绘制人物
- Effective Unity3D
- 黑马程序员_JAVA基础
- cygraph
- 如何在一个给定数组中找两个和为某个定值的数,要求时间复杂度为O(n)