1.数字转化为十六进制数
//两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 // // 给出两个整数 x 和 y,计算它们之间的汉明距离。 // // 注意: //0 ≤ x, y < 231. // // 示例: // // //输入: x = 1, y = 4 // //输出: 2 // //解释: //1 (0 0 0 1) //4 (0 1 0 0) // ↑ ↑ // //上面的箭头指出了对应二进制位不同的位置。 // // Related Topics 位运算
这里需要补充两个知识点,一个是有关原码、反码和补码的,还有一个是有关移位的。只需要记住正数的源码、反码、补码都是同一个,而负数的反码就是将对应正数的源码按位取反之后再整体进行加一,最后在前面添加一个符号位。还有一个知识是移位的,请看下面这个链接:
public String toHex(int num) {
/*String s = Integer.toHexString(num);
return s;*/
StringBuffer stringBuffer = new StringBuffer();
char[] arr = "0123456789abcdef".toCharArray();
if(num == 0){
return "0";
}
while(num != 0){
//要清楚负数在计算机中是以补码的形式存在的
int ans = num & 15;
stringBuffer.append(arr[ans]);
//这里是右移补零操作,即无符号右移,因为有符号右移>>的话对于负数,会在左边进行
//补1操作,而>>>会进行补零操作
num = num>>>4;
}
return stringBuffer.reverse().toString();
}
2.汉明距离
//两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 // // 给出两个整数 x 和 y,计算它们之间的汉明距离。 // // 注意: //0 ≤ x, y < 231. // // 示例: // // //输入: x = 1, y = 4 // //输出: 2 // //解释: //1 (0 0 0 1) //4 (0 1 0 0) // ↑ ↑ // //上面的箭头指出了对应二进制位不同的位置。 // // Related Topics 位运算
public int hammingDistance(int x, int y) {
int sum = 0;
while(y!=0 || x !=0){
int m = x&1;
int n = y&1;
if(m != n){
sum++;
}
x = x >> 1;
y = y >> 1;
}
return sum;
}
版权声明:本文为qq_40971025原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。