Использование побитового оператора

1

при выполнении практического вопроса я столкнулся с кодом:

private char[] a;
int newcap = ((a.length * 3) >> 1) + 1;

где newcap - новая емкость массива, использование ((a.length*3)+1) тоже будет достаточным, но вместо этого они использовали побитовый оператор. ((a.length*3)+1)? Я знаю использование побитового оператора. Код находится по адресу http://www.java2s.com/Tutorials/Java/Collection/ArrayList/Create_a_Char_Array_List_in_Java.htm

  • 0
    Итак, >> 1 это то же самое, что и деление на 2, но как использование побитового оператора является оптимизатором производительности вместо использования деления на 2
Теги:
operators
bit-manipulation

2 ответа

1
Лучший ответ

Это было бы не то же самое, смещение вправо 1 бит - это то же самое, что делать деление на два.

Например, 10 >> 1 = 5.

В вашем примере умножьте длину на 3, затем разделите на два и, наконец, добавьте 1 к результату, поэтому "Using ((a.length*3)+1)" не будет "достаточным".

Однако обратите внимание, что ((a.length*3)/2 +1) сделает то же самое.

Обратите внимание, что вы также можете умножить на два с побитовым оператором, но с левым сдвигом вместо правого сдвига.

System.out.println(10 << 1);//print 20
  • 0
    Спасибо, я никогда не думал , что в этом way.But то почему они использовали побитовое, я имею в виду , они могли бы просто использовали 10 / 2 , то есть оператор деления
  • 0
    Но я думаю, что использование побитового оператора >> 1 будет иметь некоторый смысл вместо использования деления на 2, потому что этот код написан известным и известным разработчиком Java
Показать ещё 5 комментариев
0
<<n is often used instead of multiplication with (2 to the power of n)
>>n is often used instead of division by (2 to the power of n)

Это только оптимизация производительности для процессора, которая дает тот же результат.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню