Я читал некоторые примеры кода и наталкивался на &
на веб-сайте Oracle на своей странице "Побитовые и битовые сдвиги". По-моему, это не слишком хорошо работало, объясняя поразрядный &
. Я понимаю, что он выполняет операцию непосредственно с битом, но я просто не уверен, что это за операция, и мне интересно, что это за операция. Вот пример программы, которую я получил на веб-сайте Oracle: http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/java/nutsandbolts/examples/BitDemo.java
Как работает побитовая и (И) на Java?
Ответ 1
Целое число представлено в виде последовательности бит в памяти. Для взаимодействия с людьми компьютер должен отображать его в виде десятичных цифр, но все вычисления выполняются как двоичные. 123
в десятичной форме сохраняется как 1111011
в памяти.
Оператор &
является поразменным "И". Результатом являются биты, которые включаются в оба числа. 1001 & 1100 = 1000
, так как только первый бит включается в обоих.
Оператор |
является поразным "Or". Результатом являются биты, которые включаются в любом из чисел. 1001 | 1100 = 1101
, так как только второй бит справа равен нулю в обоих.
Существуют также операторы ^
и ~
, которые побитовые "Xor" и побитовые "Not", соответственно. Наконец, существуют операторы сдвига <<
, >>
и >>>
.
Под капотом 123
хранится как 01111011 00000000 00000000 00000000
или 00000000 00000000 00000000 01111011
в зависимости от системы. Использование побитовых операторов, использование которых не имеет значения, поскольку оба представления рассматриваются как логическое число 00000000000000000000000001111011
. Отбрасывание ведущих нулей оставляет 1111011
.
Ответ 2
Это двоичный оператор AND. Он выполняет операцию AND, которая является частью Логической логики, которая обычно используется для двоичных чисел при вычислении.
Например:
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1
Вы также можете выполнить это для нескольких бит:
01 & 00 = 00
11 & 00 = 00
11 & 01 = 01
1111 & 0101 = 0101
11111111 & 01101101 = 01101101
...
Ответ 3
Если вы посмотрите на два числа, представленные в двоичном формате, поразрядный &
создает третье число, у которого есть 1 в каждом месте, где оба номера имеют 1. (В остальном есть нули).
Пример: 0b10011011 &
0b10100010 =
0b10000010
Обратите внимание, что они появляются только в том месте, где оба аргумента имеют один в этом месте.
Побитовые и полезны, когда каждый бит числа хранит определенную часть информации.
Вы также можете использовать их для удаления/извлечения определенных разделов чисел с помощью масок.
Ответ 4
Если вы разворачиваете две переменные в соответствии с их шестнадцатеричным кодом, это:
bitmask : 0000 0000 0000 1111
val: 0010 0010 0010 0010
Теперь простая побитовая операция И приводит к числу 0000 0000 0000 0010
, которое в десятичных единицах равно 2. Я предполагаю, что вы знаете о фундаментальных логических операциях и числовых системах.
Ответ 5
Его логическая операция над входными значениями. Чтобы понять, как преобразовать значения в двоичную форму и где бит-бит в позиции n имеет 1, результат имеет 1. В конце конвертировать назад.
Например, с этими примерными значениями:
0x2222 = 10001000100010
0x000F = 00000000001111
result = 00000000000010 => 0x0002 or just 2
Ответ 6
import.java.io.*;
import.java.util.*;
public class Test {
public static void main(String[] args) {
int rmv,rmv1;
//this R.M.VIVEK complete bitwise program for java
Scanner vivek=new Scanner();
System.out.println("ENTER THE X value");
rmv = vivek.nextInt();
System.out.println("ENTER THE y value");
rmv1 = vivek.nextInt();
System.out.println("AND table based\t(&)rmv=%d,vivek=%d=%d\n",rmv,rmv1,rmv&rmv1);//11=1,10=0
System.out.println("OR table based\t(&)rmv=%d,vivek=%d=%d\n",rmv,rmv1,rmv|rmv1);//10=1,00=0
System.out.println("xOR table based\t(&)rmv=%d,vivek=%d=%d\n",rmv,rmv1,rmv^rmv1);
System.out.println("LEFT SWITH based to %d>>4=%d\n",rmv<<4);
System.out.println("RIGTH SWITH based to %d>>2=%d\n",rmv>>2);
for(int v=1;v<=10;v++)
System.out.println("LIFT SWITH based to (-NAGATIVE VALUE) -1<<%d=%p\n",i,-1<<1+i);
}
}