Nếu tôi có một ký hiệu nhị phân như "1000010" bằng 66 và tôi muốn tăng nó bằng một đến "1000011" bằng 67. Làm thế nào được thực hiện đúng trong mảng của tôi? Hiện tại nó đang in ra "0100010" là 34, nhưng không có nơi gần câu trả lời đúng. Tôi không nghĩ rằng mảng của tôi đang dịch chuyển một cách chính xác, cũng như nó sẽ tăng kích thước khi các con số lớn hơn. Mặc dù, tôi không thể đưa ra bất kỳ giả định nào về mảng lớn có thể khác với những gì được tuyên bố rõ ràng.Làm thế nào để tăng bit một cách chính xác trong một mảng?
public class math {
//=================================================================
// increment(A) returns an array of bits representing A+1.
//=================================================================
public static byte[] increment(byte[] A)
{
byte carry= 1;
for(int i = 0; i<A.length; i++){
byte b = A[i];
A [i] ^= carry;
carry &= b;
}
return A;
}
private static String toBinString (byte [] a)
{
String res = "";
for (int i = 0; i <a. length; i++)
{
res = (a [i] == 0 ? "0": "1") + res;
}
return res;
}
/**
* @param args
*/
public static void main(String[] args) {
byte [] A ={1,0,0,0,0,1,0};
increment(A);
System.out.println (toBinString (A));
}
}
liên quan: http://stackoverflow.com/questions/1034473/java-iterate-bits- in-byte-array –
Trong khai báo của bạn A có vẻ như bạn muốn mảng ngoài cùng (đầu tiên) là bit quan trọng nhất, trong phần còn lại của chương trình, bạn xem phần tử đầu tiên của mảng là bit có ý nghĩa ít nhất. Giải pháp dễ nhất có lẽ sẽ là nhập số của bạn theo thứ tự ngược lại trong mảng, hoặc nghịch đảo mảng ... – fvu
Giải pháp này làm việc cho tôi: https://stackoverflow.com/questions/4421400/how-to-get-0- độn-nhị phân-đại diện-of-an-số-trong-java – HoldOffHunger