Java 位操作:更改二进制文件中的单个字符;数组";

Java 位操作:更改二进制文件中的单个字符;数组";,java,bit-manipulation,Java,Bit Manipulation,例如,如果我有 long binarynumber=10011; 我希望它能做到 binarynumber=binarynumber>>1; 但是,我不想丢弃最右边的数字(5位数字中的数字是01001),而是希望它是11001,其中最后一个数字移动到二进制“字符串”中的第一位。二进制数的值实际上并不重要,因为我使用它作为字符串来输出 你是说要做这样的事吗 public static String circularShiftBinary(long binaryNumber, int

例如,如果我有

long binarynumber=10011;
我希望它能做到

binarynumber=binarynumber>>1;

但是,我不想丢弃最右边的数字(5位数字中的数字是01001),而是希望它是11001,其中最后一个数字移动到二进制“字符串”中的第一位。二进制数的值实际上并不重要,因为我使用它作为字符串来输出

你是说要做这样的事吗

public static String circularShiftBinary(long binaryNumber, int shift)
{
    String bin = Long.toString(binaryNumber);
    //check that the shift isn't a fully circular shift
    if(shift % bin.length() != 0)
        while(shift-- > 0)
            bin = bin.charAt(bin.length() - 1) + bin.substring(0, bin.length() - 1);

    return bin;
}
示例要求变更

public static void main(String[] args) {
    long binaryNumber = 10011;
    int shift = 0;

    while(shift < 6)
        System.out.println(circularShiftBinary(binaryNumber, shift++));
}//main method

1.您知道吗,在二进制表示法中,
long binarynumber=10011
是1001110001011。2.在
binarynumber=binarynumber>>1中应为1被视为常数?您如何知道最右边的数字在哪里移位?如果只在数字级别执行,您将得到
10011
->
11001
->
11100
->
1110
->
111
->
111
->
111
,因为前导零没有保留。请将
new Long(binaryNumber).toString()替换为
Long.toString(binaryNumber)
。谢谢@Andreas,我真的不想创建一个新的长对象“bin=bin.charAt(bin.length()-1)+bin.substring(0,bin.length()-1);”这样做,我将如何更改此代码以使其向另一方向移动?@Spano在一张纸上写一个字符串,例如,
Hello
,然后假装这是
bin
的值。现在,在纸上手动执行该语句所做的操作。然后您将看到,并且您将学习如何更改语句以改变另一种方式。
10011
11001
11100
01110
00111
10011