2012-07-22 2 views
0

я узнал короткий тип переменной представляет собой 16-битное целое число, ноПочему результат Integer.toBinaryString для аргумента short type включает 32 бита?

short n = -1; 

    System.out.println(Integer.toBinaryString(n)); 

выходы:

11111111111111111111111111111111 

Результат включает в себя 32 бита, то почему?

+0

Поскольку фактическое значение аргумента всегда является int, правилами подписи и продвижением метода, и во-вторых, потому что это метод в классе Integer. – EJP

ответ

7

Причина в том, что Integer представляет собой 32-разрядный тип и toBinaryString() принимает аргумент int. Перед вызовом метода ваш аргумент short рекламируется до int.

+0

Есть ли какой-либо API, который может печатать короткую переменную типа в двоичном формате? –

+1

Несомненно, просто используйте 'Integer.toBinaryString()' и возьмите последние (до) 16 двоичных цифр. –

+0

Кто-то говорит, что короткое целое число оценивается в 32-бит в JVM, верно ли он сказал? –

2

short ваши неявно приводится к int при вызове toBinaryString():

public static String Integer.toBinaryString(int i) 
1

Для печати нижней 16-бит можно использовать.

System.out.println(Integer.toBinaryString(n & 0xFFFF)); 

Для нулевого похлопывания.

System.out.println(Integer.toBinaryString(0x10000 + (n & 0xFFFF)).substring(1)); 
+0

Исправьте, за исключением того, что если это положительное число, результат не будет содержать нулевого заполнения для наиболее значимых бит. –

Смежные вопросы