了解一点位运算
严格来说,在团队程序开发里位运算是一个噩梦般的存在。毕竟不是每个人对这种奇特的运算感兴趣,但是总有程序员为了性能等各方面的考虑(特别是在大数据的处理方面)从而选择采用位运算。虽然位运算的写法相对晦涩难懂,但其性能提升明显也深受喜爱,故掌握和了解一点常见的位运算,为可能潜在的程序阅读和效率提升做些铺垫。
位运算基础
& 按位与:两个位都为 1 时,结果才为 1,否则返回0。| 按位或:两个位都是 0 时,结果才为 0,否则返回1。^ 按位异或:两个位相同时为 0,相异为 1。~ 位取反:0 变 1,1 变 0。<< 左移:各二进位全部左移若干位,高位丢弃,低位补 0。>> 右移:将运算符左边的对象向右移动运算符右边指定的位数。不同编译器处理不尽相同,Java使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1。应用
1、乘除2
左移运算等价于乘2,右移运算等价于除以2,其运算效率高于乘除法运算。
示例程序:
int a=100; System.out.println(a<<1 a="" system.out.println="">>1); //表示除以2 System.out.println(a<<2 a="" system.out.println="">>2); //表示除以4 2>1>
运行结果:
200
50
400
25
2、判断奇偶数
我们通常采用偶数的数学定义(%2)来判断,由二进制原理知,二进制最后一位为0,则其转化为十进制后为偶数,若为1则十进制数为奇数,我们可以通过这个特点,与1进行按位与运算的结果判断是否为偶数。
参考实现:(本程序从键盘读入数字并进行判断)
Scanner read;
read = new Scanner(System.in);
int a;
a = read.nextInt();
if ((a & 1) == 1) {
System.out.println(a + "是一个奇数。");
} else {
System.out.println(a + "是一个偶数。");
}
3、异或实现两个数字的交换。
先补充异或运算的两个性质,a^a=0;a^0=a。
未完待续……

没有评论:
感谢每一条善意的建言和理性的讨论!
特殊时期开启审核制度敬请谅解。
挑衅和引战会被删除并永久拉黑。