java - 位循环移位仅显示一堆零

标签 java bitwise-operators

我想尝试一下按位运算符,并且特别想进行循环按位移位。假设我的号码是 101。将其向左移动 1 步应得到 011。现在,当我在 Java 中尝试这个示例时,它只显示一堆零,如下所示:

//Circular right shift
private static void testCircular() {
    int x = 37;
    System.out.println(x + " Is " + Integer.toBinaryString(x));

    x = (x >>> 8) | (x << (Integer.SIZE - 8));

    System.out.println(x + " Is " + Integer.toBinaryString(x));
}

这给了我以下结果:

37 Is 100101
620756992 Is 100101000000000000000000000000

正如您所看到的,它只是添加了尾随零,没有移动任何内容。我还尝试了 state = Integer.rotateRight(state,8); 方法,它做了同样的事情。我在这里缺少什么?

最佳答案

我认为它按预期工作,您缺少的是数字的完整表示形式 - 当您打印时,它在开头跳过零。整数以 32 位存储,因此完整表示如下:

int x = 37;
00000000000000000000000000100101

x = (x >>> 8) | (x << (Integer.SIZE - 8));
00100101000000000000000000000000

编辑

这是获取整数的完整字符串表示的方法:

public static String toBinaryStringWithLeadingZeros(int x) {
    StringBuffer buf = new StringBuffer(32);
    char[] arr = new char[Integer.numberOfLeadingZeros(x)];
    Arrays.fill(arr, '0');
    buf.append(arr);
    buf.append(Integer.toBinaryString(x));
    return buf.toString();
}

关于java - 位循环移位仅显示一堆零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47202669/

相关文章:

Java 在 ^ 上拆分(插入符号?)不起作用,这是一个特殊字符吗?

c++ - Golang 中的移位指令

c++ - 理解 C++ 中的 "Bitwise-And (&)"和 "Unary complement(~)"

c - 按位运算可以移植吗?

c - C中的逻辑运算符有什么意义?

java - Short.toString(short s, int radix) 在哪里?

java - 动画在 ViewPager 中滑动,图像发生变化

java - 如何消除 MigLayout 中两个单元格之间的垂直间隙?

java - 何时以及如何实现 Parcelable 与。可序列化?

c - C 中的数字加 1