【问题标题】:Convert value to binary and then flip all the bits in Java将值转换为二进制,然后翻转 Java 中的所有位
【发布时间】:2013-04-28 16:04:37
【问题描述】:

首先,我从参数“col”收到一个十六进制颜色代码。然后我将此值转换为二进制等效值,然后需要翻转所有位并将其转换回十六进制值。然后需要将十六进制值填充为 6 个字符。

public String invertColor(String col)
{
    String inverted = col;

    int i = Integer.parseInt(inverted, 16);
    String bin = Integer.toBinaryString(i);
    System.out.println(bin);

    int binary = Integer.parseInt(bin,2);
    System.out.println(binary);


    return inverted;
}

这是我到目前为止的代码,我整个上午都在绞尽脑汁,似乎无法找到有效的解决方案。任何帮助将不胜感激。

谢谢

【问题讨论】:

  • int flipped = !inverted 或类似?
  • @MarcB 我想你的意思是~inverted

标签: java binary hex


【解决方案1】:

使用按位非运算符~

int flipped = ~i;

【讨论】:

    【解决方案2】:

    我们是用 32 位计算二进制表示之前的所有 0,还是只取前面没有 0 的二进制表示?因为这在翻转时会有所不同。如果是前者,可以直接使用操作符~。

        int flip = ~i;
    

    但如果是第二个,还有一些工作要做。

    【讨论】:

    • 我相信它是一个没有前面零的二进制表示
    【解决方案3】:
        public String invertColor(String col)
    {
        String inverted = col;
        int i = Integer.parseInt(inverted, 16);
       String bin = Integer.toBinaryString(i);
       String flipped = "";
       for (int j = 0; j < bin.length(); j++) {
         if (bin.charAt(j) == '0') flipped += "1";
         else flipped += "0";
       }
       int k = Integer.parseInt(flipped, 2);
       inverted = Integer.toHexString(k);
       return inverted;
    

    }

    这应该可行。基本上,如果当前字符为 0,则此代码通过连接 1 来构建字符串,否则为 0。那么k就是翻转后的字符串表示的整数,反相的是hex值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      • 2018-01-29
      • 2016-12-25
      • 2020-08-31
      • 1970-01-01
      • 2017-09-27
      相关资源
      最近更新 更多