Что делает & amp; символ при назначении переменных в java [duplicate]

Это простой код для таймера:

final int sekundi = 0 ;
Timer timer = new Timer();
TimerTask t = new TimerTask() {       
    @Override
    public void run() {

        System.out.println("1");
    }
};
timer.scheduleAtFixedRate(t,1000,1000);
34
задан Anzwur 23 June 2013 в 01:32
поделиться

6 ответов

Целое число представлено в виде последовательности бит в памяти. Для взаимодействия с людьми компьютер должен отображать его в виде десятичных цифр, но все вычисления выполняются как двоичные. 123 в десятичном формате сохраняется как 1111011 в памяти.

Оператор & является поразменным «И». Результатом являются биты, которые включаются в оба числа. 1001 & 1100 = 1000, так как только первый бит включен в обоих.

Оператор | является побитным «Or». Результатом являются биты, которые включаются в любом из чисел. 1001 | 1100 = 1101, так как только второй бит справа равен нулю в обоих.

Существуют также операторы ^ и ~, которые побитовые «Xor» и побитовые «Not», соответственно , Наконец, существуют операторы сдвига <<, >> и >>>.


Под капотом 123 сохраняется как 01111011 00000000 00000000 00000000 или 00000000 00000000 00000000 01111011 в зависимости от системы , Использование побитовых операторов, использование которых не имеет значения, поскольку оба представления рассматриваются как логическое число 00000000000000000000000001111011. Снятие ведущих листьев нулей 1111011.

57
ответ дан Francesco Menzani 21 August 2018 в 12:16
поделиться
  • 1
    «123 в десятичной форме сохраняется как 1111011 в памяти» & lt; - не совсем верно ... Машина может быть немного ориентированной – fge 23 June 2013 в 02:03
  • 2
    Детали реализации. – Markus Jarderot 23 June 2013 в 02:17
  • 3
    О нет, не совсем так ... Не на Java. JVM маскирует разницу для вас. Но в памяти представление зависит от конечности машины. очень далеко от «детали реализации». – fge 23 June 2013 в 02:22
  • 4
    Это еще не относится к вопросу. – user207421 23 June 2013 в 02:25
  • 5
    @Markus, я бы поддержал вас без этого эндана. Обратите внимание, что цифры не обязательно должны быть в памяти, когда операция выполняется на регистрах (большую часть времени). – starblue 23 June 2013 в 07:59

Это двоичный оператор 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
...
9
ответ дан Alex W 21 August 2018 в 12:16
поделиться

Его логическая операция над входными значениями. Чтобы понять, как преобразовать значения в двоичную форму и где бит-бит в позиции n имеет 1, результат имеет 1. В конце конвертировать назад.

Например, с этими примерными значениями:

0x2222 =  10001000100010
0x000F =  00000000001111
result =  00000000000010   => 0x0002 or just 2
1
ответ дан clearwater 21 August 2018 в 12:16
поделиться
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);
    }
}
-1
ответ дан Davis Broda 21 August 2018 в 12:16
поделиться
  • 1
    побитовые операторы, основанные на нулях и единицах, AND, ИЛИ используемые для таблицы истинности на основе вывода – R.M.VIVEK Arni 14 October 2014 в 09:09

Если вы разворачиваете две переменные в соответствии с их шестнадцатеричным кодом, это:

bitmask : 0000 0000 0000 1111
val:      0010 0010 0010 0010

Теперь простая побитовая операция И приводит к числу 0000 0000 0000 0010, которое в десятичных единицах равно 2. Я предполагаю, что вы знаете о фундаментальных булевых операциях и числовых системах.

3
ответ дан dotslash 21 August 2018 в 12:16
поделиться

Если вы посмотрите на два числа, представленные в двоичном формате, побитовое & создает третье число, в каждом из которых есть по 1, каждое из которых имеет 1. (В остальном есть нули).


Пример: 0b10011011 & 0b10100010 = 0b10000010


Обратите внимание, что они отображаются только в том месте, где оба аргумента имеют один в этом месте. Побитовые и полезны, когда каждый бит числа хранит определенную часть информации. Вы также можете использовать их для удаления / извлечения определенных разделов чисел с помощью масок.

4
ответ дан user 21 August 2018 в 12:16
поделиться
Другие вопросы по тегам:

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