Позвольте мне начать с рассмотрения вашей путаницы.
Судя по вашему имени метода convertDecimalTo2sComp
и вашему параметру decimal
, вы ожидаете, что аргумент будет "десятичным" (base- 10) в каком-то смысле. Но на самом деле это не так: аргумент - это просто целое число в диапазоне [−2 31 , 2 31 -1], , а не , в частности, основание -10 представление этого целого числа. Внутренне, на самом деле, он фактически представлен в виде двоичного целого числа с дополнением до двух - например, если целое число равно -8, то он представлен внутри как 1111 1111 1111 1111 1111 1111 1111 1000
- но это имеет значение только при использовании операций на уровне битов, таких как &
(поразрядно "и") и >>
(сдвиг вправо). может показаться как целые числа, представленные в базе 10, потому что преобразования в и из строк используют базу 10 по умолчанию (например, Integer.toString(32)
эквивалентно Integer.toString(32, 10)
и Integer.valueOf("32")
эквивалентно Integer.valueOf("32", 10)
) и потому что мы обычно пишем их в десятичном виде в исходном коде (например, мы обычно пишем целое число 32 как 32
, а не 0x20
или 040
или 0b10_0000
); но это все только для нашего удобства и не имеет ничего общего с внутренним представлением.
Так, например, все эти утверждения точно эквивалентны:
System.out.println(32);
System.out.println(0x20);
System.out.println(040);
System.out.println(0b100000);
System.out.println(0b_0010_0000);
потому что во всех случаях целое число 32 внутренне представляется как 0000 0000 0000 0000 0000 0000 0010 0000
.
с этим уточненным. , .
Чтобы утверждать, что что-то представляет собой массив символов, содержащий тринадцать '1'
-s, за которыми следуют три '0'
-s, вы можете либо использовать Assert.assertArrayEquals
[ link ], либо можно преобразовать char[]
в String
и использовать Assert.assertEquals
. Итак, любой из них:
assertArrayEquals(
new char[] {
'1', '1', '1', '1', '1', '1', '1', '1',
'1', '1', '1', '1', '1', '0', '0', '0' },
Convert.convertDecimalTo2sComp(data);
assertArrayEquals(
"1111111111111000".toCharArray(),
Convert.convertDecimalTo2sComp(data));
assertEquals(
"1111111111111000",
new String(Convert.convertDecimalTo2sComp(data)));