把十进制转成十六进制,我们有时真正需要的是1111 1111这样的码,而不是FF这样的十六进制。需要这样的八位0和1来表示某些东西的状态。
十进制: | 1 | 10 | 19 | 71 | 92 | 108 | 219 |
十六进制: | 00000001 | 00001010 | 00010011 | 01000111 | 01011100 | 01101100 | 11011011 |
不多说,直接上代码:
主要位运算代码
//num是我们需要转化的数
private static int getBit(int num, int index)
{
return (num & (0x1 << index)) >> index;
}
全部代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i = 7; i >= 0; i--){
System.out.print(getBit(219,i));
}
}
//num是我们需要转化的数
private static int getBit(int num, int index)
{
return (num & (0x1 << index)) >> index;
}
}
代码中的0x1是最低位,也可以写成1。
当我们num为8的时候
index:0
返回的这位为0
index:1
0000 0010 //1左移1位
0000 1000 //num
0000 0000 //num & index
0000 0000 //(num & index)右移1位
返回的这位为0
index:2
0000 0100 //1左移2位
0000 1000 //num
0000 0000 //num & index
0000 0000 //(num & index)右移2位
返回的这位为0
index:3
0000 1000 //1左移3位
0000 1000 //num
0000 1000 //num & index
0000 0001 //num & index右移3位
返回的这位为1
index:4
0001 0000 //1左移4位
0000 1000 //num
0000 0000 //num & index
0000 0001 //num & index右移4位
返回的还是0
接下来的都是0
index:等于0~7,打印的是0001 0000
index:等于7~0,打印的是0000 1000
欢迎交流学习,其实我对位运算也不怎么会,如果是做单片机的,肯定对位运算很厉害。但我是做Java的。