一、位运算
判断奇偶,可以用&符号
如果x & 1 = 1,就是奇数
如果x & 1 = 0,就是偶数
题目:
可以用(n-1)&n,去掉最低位的1,进行求解,每一次,cnt++,当n==0的时候,就是终止条件;
import java.util.Scanner;
public class A001_位运算 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.println(Integer.toString(n, 2));
int cnt = 0;
while (n != 0) {
n = (n - 1) & n;
cnt++;
}
System.out.println(cnt);
}
}
//可以用Integer.toString(n, 2)获得十进制的二进制数表示
与上题有关联:
if(((n - 1) & n) == 0)
return true;
else
return false;
题目:把整数的奇偶位互换
public class A002_交换奇偶位 {
public static void main(String[] args) {
int a = 9;
int b = m(a);
System.out.println(b);
}
public static int m(int a) {
int ou = a & 0xaaaaaaaa;// 1010 做与运算,取出偶数位
int ji = a & 0x55555555;// 0101 做与运算,去除奇数位
int res = ou >> 1 ^ ji << 1;
return res;
}
}
题目:二进制表示浮点数
二进制中,1往左移代表乘以2,往右移代表除以2
整数的十进制转二进制是除2;取余留商
小数转二进制是乘2,判断小数点前面的整数部分是否是1,然后扣掉整数部分,再进入循环(概括:乘2,判断整数位,扣掉整数位,进入循环)
public class A003_二进制表示浮点数 {
public static void main(String[] args) {
double n = 0.3;
String s = "0.";
while (n > 0) {
n = n * 2;
if (n >= 1) {
n -= 1;
s += 1;
} else {
s += 0;
}
if (s.length() > 32) {
// 如果算0.这两个的话,就是大于32
// 如果不算的话,就是大于34
System.out.println("ERROR");
return;
}
}
System.out.println(s);
}
}
–end–