一、题目
现有一个二进制数,如何快速判断某位(从右往左数)是0还是1?
二、题解
1.奇巧淫技
使用 与(&) 运算符。
1.1 方式一
这种方式比较简单易懂。
先将数字右移指定第i位,然后再用&与1运算
public static int and2(int num, int i) {
// 先将数字右移指定第i位,然后再用&与1运算
return num >> (i-1) & 1;
}
1.2 方式二
先将1左移到指定的第i位,然后在用与&判断是否是1。最后右移第i位回去。
public static int and(int num, int i) {
// 先将1左移到指定的第i位,然后在用与&判断是否是1。最后右移第i位回去。
return (1 << (i-1) & num) >> (i-1);
}
2.其他解法
整数转换成二进制字符字符串,再转成字符数组判断。
public static int other(int num, int i) {
String s = Integer.toBinaryString(num);
char[] chars = s.toCharArray();
int len = s.length();
if (i <= len && i > 0) return chars[len-i] - 48;
return 0;
}
相关
更多奇淫巧技的题解请点击:【奇淫巧技】题解集