Подтвердить что ты не робот

Как работает побитовая и (И) на Java?

Я читал некоторые примеры кода и наталкивался на & на веб-сайте Oracle на своей странице "Побитовые и битовые сдвиги". По-моему, это не слишком хорошо работало, объясняя поразрядный &. Я понимаю, что он выполняет операцию непосредственно с битом, но я просто не уверен, что это за операция, и мне интересно, что это за операция. Вот пример программы, которую я получил на веб-сайте Oracle: http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/java/nutsandbolts/examples/BitDemo.java

4b9b3361

Ответ 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);
    }
}