Недавно я начал изучать Java, и теперь я освещаю часть оператора бит. Во время учебы мне было интересно, когда используются эти побитовые операторы, и я хотел бы, чтобы вы дали мне несколько примеров, если это возможно. Спасибо!Когда используется побитовый оператор?
ответ
Хороший пример - побитовое исключающее ИЛИ, чтобы поменять два номера (опять же, очень популярны в интервью) - быстрая подкачка значения без какой-либо третьей переменной:
int a = 2; // a = 0010
int b = 11; // b = 1011
a = a^b; // a = 0010^1011 = 1001
b = a^b; // b = 1001^1011 = 0010 (as a at the beginning)
a = a^b; // a = 1001^0010 = 1011 (as b at the beginning)
Вы можете найти статью об этом в wiki
@JohnKugelman только что отредактировал. Вы имели в виду это объяснение? – nosmo
+1 за предоставление чего-то, чего я не знал :) –
Есть несколько мест, хотя они не то, что вы часто будете использовать. Вы просто закончите использовать их, когда они вам понадобятся.
Хорошим примером является проверка, является ли число четным:
if (num & 1 == 0) {}
Они также полезны в флагах, такие как наличие этого:
private static final int ENABLE_FOO = 0x0001;
private static final int ENABLE_BAR = 0x0002;
static int mask = (ENABLE_FOO | ENABLE_BAR);
public static void example() {
if (mask & ENABLE_FOO) { //If flag set.
do_foo();
}
if (mask & ENABLE_BAR) { //If flag set.
do_bar();
}
}
public static void doFooOnce() {
if (mask & ENABLE_FOO) { //If flag set.
do_foo();
}
mask &= ~ENABLE_FOO; //Bitwise and mask by the bitwise opposite of ENABLE_FOO
}
Там в других местах тоже. Просто знайте, что вы не будете использовать их слишком часто, но когда вы это сделаете, они будут полезны.
Побитовые операторы используются для манипуляции бит, то есть в случаях, когда вы хотите перейти к «gory details» структур данных, которые в конце дня являются последовательностями байтов.
Существует множество учебников, которые объясняют различные применения побитовых операторов, однако я дам вам только одно, что (ИМХО) является наиболее полезным (по крайней мере для меня).
Иногда вы хотите обрабатывать множество булевых флагов. Вы можете создать Map<String, Boolean>
и (например) передать экземпляр такой карты в какой-то метод (назовем его foo()
), т.е .:
Map<String, Boolean> options = new HashMap<>();
// fill the map
foo(options);
Очевидно, что мы можем использовать перечисление и EnumMap вместо строковых ключей.
В качестве альтернативы можно определить ряд констант, таких как:
общественности статической окончательный ИНТ ONE = 1; public static final int TWO = 2; public static final int THREE = 4; public static final int FOUR = 8;
и т.д. и т.п.
Теперь мы можем изменить foo()
получить int
параметр и назовите его следующим образом:
foo(ONE | TWO);
foo(ONE | FOUR);
т.д.
В некоторых случаях это обозначение является более удобным для чтения; в большинстве случаев он экономит память и дает некоторые преимущества в производительности.
Обратите внимание, что уже упомянутый EnumMap
реализован с использованием этой техники, поэтому вы можете просто использовать его в большинстве случаев и пользоваться как эффективностью, так и OOD.
- 1. Когда следует использовать побитовый оператор?
- 2. C++ '>' побитовый оператор
- 3. Побитовый и оператор
- 4. Побитовый оператор булевых вычислений
- 5. Побитовый и (&) оператор
- 6. Побитовый & оператор возвращает 255
- 7. C побитовый оператор '&' использует
- 8. Как работает побитовый оператор
- 9. Побитовый оператор «&» на uint
- 10. Как работает побитовый оператор XOR ('^')?
- 11. Побитовый оператор в apache derby
- 12. поясняющей макрос, который использует побитовый оператор
- 13. Побитовый оператор в js противоречив?
- 14. Google Closure Template Побитовый оператор
- 15. Побитовый оператор в объекте C
- 16. Побитовый оператор в бурении Apache
- 17. Побитовый оператор в выражении if
- 18. Почему мы используем побитовый оператор?
- 19. Когда используется оператор-оператор, его аргумент, когда он является структурой?
- 20. Когда оператор << ссылается на оператор ввода и когда на побитовый сдвиг влево?
- 21. Использует ли побитовый оператор большой объем ресурсов?
- 22. Побитовый оператор И не работает должным образом
- 23. Побитовый оператор Java не работает должным образом
- 24. Побитовый оператор AND с varbinary column
- 25. Побитовый оператор C# против побитового оператора Javascript
- 26. Что побитовый оператор & делает в этом примере?
- 27. NOT (~) побитовый оператор по номеру подписанного типа
- 28. Побитовый оператор по указателю на класс?
- 29. Применить побитовый оператор к значениям массива
- 30. Почему этот побитовый оператор приводит к ложному?
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html –
Возможный дубликат [Когда использовать побитовые операторы во время веб-разработки?] (http://stackoverflow.com/questions/261062/when-to-use-bitwise-operators-during-webdevelopment) –
Можете ли вы сузить его? Когда вы googled это, какие ссылки вы появились, и какие у вас вопросы об этих ссылках? –