Вопрос по поводу sizeof.Я хочу поменять местами биты - PullRequest
0 голосов
/ 07 июня 2010

Что будет эквивалентно этому в Java?

for (i = (sizeof(num)*8-1); i; i--)  

num - это номер, а не массив. Я хочу обратить биты в целое число.

Ответы [ 5 ]

4 голосов
/ 07 июня 2010

Java не имеет sizeof. Массивы имеют свойство length, а во многих коллекциях size() и тому подобные вещи, но лингвистический sizeof для любого произвольного объекта не поддерживается и не нужен.

Похожие вопросы


Получение битов целого числа в порядке LSB-MSB

Чтобы получить биты целого числа от его младшего значащего бита до его старшего значащего бита , вы можете сделать что-то вроде этого:

    int num = 0xABCD1234;
    System.out.println(Integer.toBinaryString(num));
    for (int i = 0; i < Integer.SIZE; i++) {
        System.out.print((num >> i) & 1);
    }

Это печатает:

10101011110011010001001000110100    // MSB-LSB order from toBinaryString
00101100010010001011001111010101    // LSB-MSB order from the loop

Таким образом, в этом конкретном случае sizeof * 8 преобразуется в Integer.SIZE, «число битов, используемых для представления значения типа int в двоичной форме дополнения до двух». В Java это установлено на 32.

JLS 4.2.1 Интегральные типы и значения

Для int, от -2147483648 до 2147483647, включительно

1 голос
/ 07 июня 2010

Этот цикл, вероятно, выполняет итерацию по массиву в обратном порядке. В данном случае это массив объектов 'num', и в массиве 8 элементов («-1» необходим, поскольку массив из 8 элементов имеет допустимые индексы 0 ... 7).

Чтобы сделать это в Java, эквивалент будет:

for(int i = array.length-1; i >= 0; --i)
0 голосов
/ 12 июля 2010

В дополнение к ответу полигеномасляных смазок в Java есть еще один способ обратить биты целого числа:

int reversed = Integer.reverse(input);

Легко!

Стоит проверить исходный код Integer.reverse, он довольно изящный (и крайне пугающий).

0 голосов
/ 07 июня 2010

Прямого эквивалента нет.Sizeof возвращает размер типа или типа выражения в байтах, и эта информация недоступна в Java.

Это не требуется, поскольку размеры в байтах встроенных типов фиксированы, длины массивов получены с помощью псевдо-поля .length, а память для объектов выделяется с помощью new, поэтомуразмер объекта не требуется.

Если вы скажете использовать тип num, то его можно перевести.

0 голосов
/ 07 июня 2010

в C / C ++, оператор sizeof сообщает, сколько байтов переменная или тип занимает на текущей целевой платформе. То есть, это зависит от целевой платформы, и поэтому есть ключевое слово для ее обнаружения.

Java ориентирована на виртуальную машину, а размер типов постоянен.

Если num - это int, то это 4 байта (32 бита). Если это длинный, то это 8 байтов (64 бита).

Кроме того, вы не можете рассматривать переменную как массив байтов. Вы должны использовать побитовые операторы (сдвиги и т. Д.) Для управления битами в примитиве типа int или long.

...