2011/1/6------ 2day
Java基础
位运算
对于int型,1<<35和1<<3是相同的----int型是32位,对35模32,而左侧的操作数是long型时需对右侧操作数64
对于long型,8L<<56和8L<<1是相同的
1. 2→→8 2<<3
例题
1.判断奇偶数 :
二进制的最后一位是0的话那么就为偶数。是1的话就为奇数,
都和1做与运算就可以求出最后一位与1运算的结果来判断奇偶了
代码:
class Test {
public static void main(String[] args) {
int nums = 99;
//注意+号 优先级>三元运算符
System.out.println(nums+ "是: " + (((nums&1)==0)?"偶数":"奇数"));
}
}
2.获取某个数的二进制数的某一位是0还是1
给定86,判断二进制第五位是0还是1?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YDlv06eG-1641437491472)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220105094230991.png)]
//法1 具体程序实现可以是,将1左移4位,与运算后再右移四位,再判断结果。
class Test {
public static void main(String[] args) {
int a=86;
System.out.println("86的二进制第五位是"(((a&(1<<4))>>4)==0 ? "0" : "1")) ;
}
}
//法2
class Test {
public static void main(String[] args) {
int a=86;
System.out.println("86的二进制第五位是"+( (((a>>4)&1)==0 ? "0" : "1"))) ;
}
}
3.交换两个整数变量的值
public static void swap1(int a,int b)
{
//使用位运算中的异或,俩次异或不改变原值
a = a^b;
b = a^b; // a^b^b 此时b=原来的a
a = a^b;
System.out.println(a, b);
}
4.不用判断语句,求整数的绝对值:
int number=-10;
/*
* >> 右移,高位补符号位
* >>> 无符号右移,高位补0
* ^ 异或,相同为0,不同为1
*/
System.out.println(number + "的绝对值是:" + ((number^(number>>31))+(number>>>31)));