按位运算符和二进制字符串计算

时间:2012-10-04 10:42:06

标签: java binary bit-manipulation hex

我有一个赋值,我必须将十六进制转换为16位二进制字符串,然后使用按位运算符比较其中的两个。我有一个for循环执行a.charAt[i]& b.charAt[i]到字符串构建器字符串。现在,我希望输出一个二进制数,但我已经到了每一行执行的点,它给出了不是0或1的数字。它给了我2个数字(2和3)。我做错了什么?

一些代码:

    int bin = 0;
    hex = hex.replaceFirst("0x", "");
    bin = Integer.parseInt(hex, 16);
    hex = String.format("%16s", Integer.toBinaryString(bin));
    return hex;

我要评估的两个十六进制是FFF70001。我已成功将它们转换为二进制字符串。另外我不知道为什么但前面的零没有出现,只是空格:/

我在网上看了好几个小时,似乎无法找到我遇到的问题。

2 个答案:

答案 0 :(得分:1)

我认为您应该查看Integer.parseInt()以将十六进制字符串转换为整数。一旦你有了数字表示,你的二进制操作就会容易得多。

如果您确实需要字符串二进制表示,请查看Integer.toBinaryString()

答案 1 :(得分:1)

我假设您想要将两个16位,大端,十六进制数字按位并在一起,并将结果显示为二进制。

正如其他人所说,使用数字而不是字符串会让你的生活更轻松 - 除非这是作业的约束?

如果我按照我的假设完成这项任务,并且据我了解,我会:

  • 将字符串转换为数字
  • 对于每个数字位,从0x8000到{并包括0x0001
    • &相应的位
    • 将结果附加到StringBuilder
  • 返回StringBuilder
  • 的内容

要逐步浏览每个数字的相应位,我会使用bit maskingbit shifting

N.B。 0x8000是16位数字的最高位。

另一种方法是让Java做很多事情,但这可能不是你的任务的重点:

final int a = Integer.parseInt("FFF7", 16); // 0b1111111111110111
final int b = Integer.parseInt("0001", 16); // 0b0000000000000001

final int result = a & b;

final String output = String.format("%16s", 
    Integer.toBinaryString(result)).replace(' ', '0');

System.out.println(output); 

这将打印:

0000000000000001

我希望这在某种程度上有所帮助,而且我的假设并没有太远。祝你好运!