JavaRush /Java Blog /Random-KO /Java 연산자 소개: 논리, 산술, 비트 단위

Java 연산자 소개: 논리, 산술, 비트 단위

Random-KO 그룹에 게시되었습니다
Java의 연산(숫자, 논리, 비트)에 대해 이야기해 보겠습니다. 이는 프로그래밍 방법을 배우기 위해 반드시 필요한 이론적 기초입니다. Java 연산자 소개: 논리, 산술, 비트 - 1

Java의 연산자 유형은 무엇입니까?

모든 작업에는 최소한 두 가지가 필요합니다.
  • 운영자;
  • 피연산자.
연산자의 예로는 두 숫자를 더하는 연산에서 간단한 더하기를 들 수 있습니다. 그리고 이 경우에는 서로 더해진 숫자가 피연산자가 됩니다. 따라서 연산자의 도움을 받아 하나 이상의 피연산자에 대해 연산을 수행합니다. 두 개의 피연산자에 대해 연산을 수행하는 연산자를 이진수라고 합니다. 예를 들어 두 개의 숫자를 추가합니다. 단일 피연산자에 대해 연산을 수행하는 연산자를 단항이라고 합니다. 예를 들어, 단항 빼기입니다.

JavaRush 과정의 Java 연산자

첫 번째 퀘스트의 네 번째 수준 인 Java 구문에서 Java 연산자에 대한 여러 강의가 제공됩니다 . 특히 boolean 과 같은 조건부 연산자 . 이 과정에는 비교 연산자, 조건 연산자 및 논리 연산자의 작업을 이해하는 데 도움이 되는 22개의 작업이 포함되어 있습니다.

Java의 숫자 연산

프로그래머가 숫자에 대해 수행하는 가장 일반적인 작업은 숫자 값을 변수에 할당하는 것입니다. 그녀는 교환원처럼 =당신에게 친숙합니다.
int a = 1;
int b = 2;
int c = 3;
산술 연산도 있습니다. 이는 이진 산술 연산자를 사용하여 수행됩니다.
표 1. 이진 산술 연산자
Java 연산자 소개: 논리, 산술, 비트 - 2처음 네 연산자는 어떤 질문도 제기해서는 안 됩니다. 모든 것이 수학과 동일합니다. 나눗셈의 나머지 부분인 마지막 연산자도 너무 복잡한 작업을 수행하지 않습니다. 예를 들어, 24를 7로 나누면 3개의 정수와 3개의 나머지가 나옵니다. 이 연산자가 반환할 나머지는 다음과 같습니다.
System.out.println(24 % 7); // prints 3
다음은 공식 Oracle 문서 사이트의 예입니다. Java 연산자 소개: 논리, 산술, 비트 단위 - 3이 프로그램은 다음을 출력합니다. 1 + 2 = 3 3 - 1 = 2 2 * 2 = 4 4 / 2 = 2 2 + 8 = 10 10 % 7 = 3 Java에서는 다음을 허용합니다. 결합: 예를 들어 연산자 할당 및 산술 연산자. 예를 살펴보겠습니다:
int x = 0;
x = x + 1; // x = 0 + 1 => x = 1
x = x + 1; // x = 1 + 1 => x = 2
x = x + 1; // x = 2 + 1 => x = 3
여기서는 변수를 정의 x하고 0 값을 할당했습니다. x다음으로, 각 줄에서 변수의 현재 값과 1의 합계에 값을 할당합니다 x. 각 줄마다 주석에 설명이 있습니다. 이 절차를 변수 증가 또는 증가라고 합니다. 위 예의 증분 연산은 연산자 조합을 사용하여 유사한 연산으로 대체될 수 있습니다.
int x = 0;
x += 1; // x = 0 + 1 => x = 1
x += 1; // x = 1 + 1 => x = 2
x += 1; // x = 2 + 1 => x = 3
대입 연산자를 산술 연산자와 결합할 수 있습니다.
int x = 0;
x += 10; // x = 0 + 10 => x = 10
x -= 5; // x = 10 - 5 => x = 5
x *= 5; // x = 5 * 5 => x = 25
x /= 5; // x = 25 / 5 => x = 5
x %= 3; // x = 5 % 3 => x = 2;
마지막 예제가 어떻게 작동하는지 살펴보겠습니다.
Java 연산자 소개: 논리, 산술, 비트 단위 - 4
Java에는 이항 연산자 외에도 단항 산술 연산자가 있습니다.
표 2. 단항 산술 연산자:
Java 연산자 소개: 논리, 산술, 비트 단위 - 4단항 더하기 및 빼기의 예:
int x = 0;
x = (+5) + (+15); // Parentheses for clarity, it is possible without them
System.out.println("x = " + x);

int y = -x;
System.out.println("y = " + y);
Java 연산자 소개: 논리, 산술, 비트 - 6
증가 및 감소 연산은 기본적으로 간단합니다. 첫 번째 경우에는 변수가 1만큼 증가하고 두 번째 경우에는 변수가 1만큼 감소합니다. 예는 다음과 같습니다.
int x = 9;
x++;
System.out.println(x); // 10

int y = 21;
y--;
System.out.println(y); // 20
이러한 작업에는 접미사(postfix)와 접두사(prefix)라는 두 가지 유형이 있습니다. 첫 번째 경우에는 연산자가 변수 뒤에 작성되고, 두 번째 경우에는 변수 앞에 작성됩니다. 유일한 차이점은 증가 또는 감소 연산을 수행할 때입니다. 아래 표에 예시와 설명이 나와 있습니다. 변수가 있다고 가정해 보겠습니다.
int a = 2;
그 다음에:
표 3. 증가-감소 연산자:
Java 연산자 소개: 논리, 산술, 비트 단위 - 5데모:
Java 연산자 소개: 논리, 산술, 비트 단위 - 8
산술 외에도 두 숫자의 비교 연산이 있습니다. 결과는 항상 true 또는 false( true / false )입니다.
표 4. 비교 연산자
Java 연산자 소개: 논리, 산술, 비트 단위 - 9예:
int a = 1;
int b = 2;

boolean comparisonResult = a == b;
System.out.println("a == b :" + comparisonResult);

comparisonResult = a != b;
System.out.println("a != b :" + comparisonResult);

comparisonResult = a > b;
System.out.println("a >  b :" + comparisonResult);

comparisonResult = a >= b;
System.out.println("a >= b :" + comparisonResult);

comparisonResult = a < b;
System.out.println("a <  b :" + comparisonResult);

comparisonResult = a <= b;
System.out.println("a <= b :" + comparisonResult);
데모:
Java 연산자 소개: 논리, 산술, 비트 단위 - 10

Java의 논리 연산

각각의 논리 연산과 진리표를 살펴보겠습니다.
  • 부정 연산( NOT);
  • 결합 연산, 논리 AND( AND);
  • 분리 연산, 논리 OR( OR);
  • 모듈로 덧셈 연산, 배타적 OR( XOR).
부정 연산자는 단항 연산자이며 단일 피연산자에 적용됩니다. 다른 모든 작업은 바이너리입니다. 이러한 연산의 진리표를 고려해 봅시다. 여기서 0 은 Java에서 false 에 해당 하고 1 은 true 에 해당합니다 .
표 5. 부정 연산자 진리표(NOT)
Java 연산자 소개: 논리, 산술, 비트 - 7
표 6. 결합 연산자(AND)의 진리표
Java 연산자 소개: 논리, 산술, 비트 단위 - 8
표 7. 논리합 연산자(OR)의 진리표
Java 연산자 소개: 논리, 산술, 비트 단위 - 9
표 8. 모듈로 덧셈 연산자(XOR)의 진리표
Java 연산자 소개: 논리, 산술, 비트 단위 - 10Java에는 동일한 논리 연산이 있습니다.
  • !- 부정 연산자
  • &&— 논리 AND 연산자(짧은);
  • ||— 논리 OR 연산자(짧은);
  • &— 비트 AND 연산자;
  • |— 비트 OR 연산자;
  • ^— 비트 배타적 OR 연산자.
아래에서 비트 연산자와 속기 연산자의 차이점을 조금 더 살펴보겠습니다. 동시에 모든 진리표를 Java 코드로 변환해 보겠습니다.
public class LogicDemo {

   public static void main(String[] args) {
    notExample();
    andExample();
    orExample();
    xorExample();
   }

   public static void notExample() {
    System.out.println("NOT EXAMPLE:");
    System.out.println("NOT false = " + !false);
       System.out.println("NOT true  = " + !true);
    System.out.println();
   }

   public static void andExample() {
    System.out.println("AND EXAMPLE:");
    System.out.println("false AND false = " + (false & false));
    System.out.println("false AND true  = " + (false & true));
    System.out.println("true  AND false = " + (true & false));
    System.out.println("true  AND true  = " + (true & true));
    System.out.println();
   }

   public static void orExample() {
    System.out.println("OR EXAMPLE:");
    System.out.println("false OR false = " + (false | false));
    System.out.println("false OR true  = " + (false | true));
    System.out.println("true  OR false = " + (true | false));
     System.out.println("true  OR true  = " + (true | true));
    System.out.println();
   }

   public static void xorExample() {
    System.out.println("XOR EXAMPLE:");
    System.out.println("false XOR false = " + (false ^ false));
    System.out.println("false XOR true  = " + (false ^ true));
    System.out.println("true  XOR false = " + (true ^ false));
    System.out.println("true  XOR true  = " + (true ^ true));
    System.out.println();
   }
}
이 프로그램은 다음을 표시합니다. NOT 예: NOT false = true NOT true = false AND 예: false AND false = false false AND true = false true AND false = false true AND true = true OR 예: false OR false = false false OR true = true true OR false = true true OR true = true XOR 예: false XOR false = false false XOR true = true true XOR false = true true XOR true = false 논리 연산자는 변수에만 적용됩니다 boolean. 우리의 경우 값에 직접 적용했지만 변수와 함께 사용할 수도 있습니다 boolean.
Java 연산자 소개: 논리, 산술, 비트 - 15
그리고 boolean표현에:
Java 연산자 소개: 논리, 산술, 비트 - 16
이제 단축 연산자( &&, ||)와 유사한 비트 연산자( &, |)가 있습니다. 그들 사이의 차이점은 무엇입니까? 첫째, 비트 단위는 정수에 적용될 수 있습니다. 이에 대해서는 잠시 후에 이야기하겠습니다. 둘째, 일부는 축약되고 다른 일부는 축약됩니다. 약어가 어떤 모양인지 이해하기 위해 다음 표현식을 살펴보겠습니다.

false AND x = ?
true OR x = ?
이는 x모든 부울 값을 사용할 수 있습니다. 그리고 일반적으로 논리식과 진리표의 법칙에 따라 참인지 거짓 x 인지 에 관계없이 첫 번째 식의 결과는 거짓이 되고 두 번째 식의 결과는 참이 됩니다 . 바라보다.
Java 연산자 소개: 논리, 산술, 비트 - 17
때로는 표현식의 결과가 첫 번째 피연산자에서 계산될 수 있습니다. 이것이 축약된 연산자 &&와 를 구별하는 것입니다 ||. 위에서 설명한 것과 유사한 표현식에서는 두 번째 피연산자의 값을 평가하지 않습니다. 다음은 작은 예입니다.
Java 연산자 소개: 논리, 산술, 비트 - 18
단축 연산자의 경우 표현식의 두 번째 부분은 평가되지 않습니다. 그러나 이는 표현식의 결과가 첫 번째 피연산자에서 이미 분명한 경우에만 발생합니다.

Java의 비트 연산

자, 여기서 가장 흥미로운 부분인 비트 연산에 이르렀습니다. 이름에서 알 수 있듯이 이는 비트에서 수행되는 작업입니다. 하지만 이 주제에 대해 자세히 알아보기 전에 관련 영역에 대해 이야기해 볼 가치가 있습니다.

이진수 체계의 숫자 표현

프로그램의 다른 정보와 마찬가지로 숫자도 이진 코드로 컴퓨터 메모리에 저장됩니다. 이진 코드는 0과 1의 집합입니다. 각각의 0 또는 1은 비트라는 정보 단위를 나타냅니다.

위키피디아에 따르면:

비트(영어 이진수 - 이진수, 단어 놀이: 영어 비트 - 조각, 입자)는 정보량을 측정하는 단위입니다. 1비트의 정보는 켜짐 또는 꺼짐, 예 또는 아니오, 높음 또는 낮음, 충전됨 또는 충전되지 않음의 두 가지 의미를 가질 수 있는 기호 또는 신호입니다. 이진법에서는 1(1) 또는 0(영)입니다.

비트 연산자는 어떤 종류의 데이터를 사용합니까?

Java의 비트 연산은 정수에 대해서만 수행됩니다. 정수는 비트 집합으로 컴퓨터 메모리에 저장됩니다. 컴퓨터는 모든 정보를 이진수 시스템(비트 집합)으로 변환한 다음 상호 작용한다고 말할 수 있습니다. 그러면 이진수 시스템은 어떻게 작동합니까? 십진수 체계에는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 등 10개의 기호만 있습니다. 우리는 이 기호를 사용하여 계산합니다. 9 이후에는 10, 19 이후 - 20, 99 이후 - 100, 이후 749 - 750이 옵니다. 즉, 사용 가능한 10개 기호의 조합을 사용하고 이를 사용하여 "0부터 점심까지" 계산할 수 있습니다. 이진법에서는 10개의 기호 대신 2개의 0, 1만 있습니다. 그러나 10진법에서와 동일한 원리에 따라 이러한 기호를 결합하면 무한정 셀 수 있습니다.
10진수와 2진수로 0부터 15까지 계산하는 방법을 보여드리겠습니다.
Java 연산자 소개: 논리, 산술, 비트 - 11보시다시피 모든 것이 그렇게 복잡하지 않습니다. 비트 외에도 바이트 , 킬로바이트 , 메가바이트 , 기가바이트 등 다른 친숙한 정보 단위가 있습니다. 아마도 1바이트에 8비트가 있다는 것을 알고 있을 것입니다 . 무슨 뜻이에요? 이는 연속된 8비트가 1바이트를 차지한다는 의미입니다. 다음은 바이트가 될 수 있는 예입니다.

00000000 - 1 byte
10110010 - 1 byte
01011011 - 1 byte
한 바이트에서 가능한 반복되지 않는 비트 조합의 수는 256(2 8 = 256)입니다. 하지만 Java에 더 가까이 돌아가 보겠습니다. 정수 데이터 유형이 있습니다 byte. 이 유형은 -128부터 127까지의 값을 가질 수 있으며 컴퓨터 메모리의 숫자 하나는 정확히 8비트, 즉 1바이트를 차지합니다. byte이 유형의 숫자 ​​하나는 정확히 컴퓨터 메모리 1개를 차지합니다 . 그리고 여기서 이름은 우연히 일치하지 않습니다. 우리가 기억하는 것처럼 1바이트는 256개의 서로 다른 값을 저장할 수 있습니다. 그리고 하나의 유형 번호는 byte256개의 서로 다른 값(음수 128개, 양수 127개, 0 1개)을 가질 수 있습니다. 각 숫자 값에는 byte8비트의 고유한 세트가 있습니다. byte이는 type 뿐만 아니라 모든 정수 유형 의 경우입니다 . 유형은 byte가장 작은 것으로 예로 제공됩니다. 아래 표는 모든 Java 정수 유형과 이들이 차지하는 메모리 공간을 보여줍니다. Java 연산자 소개: 논리, 산술, 비트 - 12유형을 고려하십시오 int. 2147483648개의 음수 값, 2147483647개의 양수 값 및 1개의 0을 저장할 수 있습니다. 총:

2147483648 + 2147483647 + 1 = 4294967296.
이 유형은 컴퓨터 메모리에서 32비트를 차지합니다. 32개의 0과 1 세트에서 가능한 조합의 수는 다음과 같습니다.
232 = 4294967296.
해당 유형이 보유할 수 있는 값의 개수와 동일한 수입니다 int. 이는 데이터 유형의 값 범위와 크기(메모리의 비트 수) 사이의 관계를 보여주는 것입니다. Java에서는 모든 유형을 바이너리로 변환할 수 있습니다. Java 언어를 사용하여 이 작업을 얼마나 쉽게 수행할 수 있는지 살펴보겠습니다. type 의 예를 통해 배워보겠습니다 int. 이 유형에는 자체 래퍼 클래스( )가 있습니다 Integer. 그리고 그에게는 toBinaryString우리를 위해 모든 일을 해줄 한 사람이 있습니다.
Java 연산자 소개: 논리, 산술, 비트 - 21
짜잔 – 그렇게 복잡하지는 않습니다. 하지만 여전히 명확히 해야 할 것이 있습니다. int숫자는 32비트를 사용합니다. 하지만 위의 예에서 숫자 10을 인쇄하면 콘솔에 1010이 표시됩니다. 이는 선행 0이 인쇄되지 않기 때문입니다. 표시되는 경우 1010 대신 콘솔에 000000000000000000000000000001010이 표시되지만 이해하기 쉽도록 앞에 오는 0은 모두 생략됩니다. 스스로에게 질문하기 전까지는 그다지 어렵지 않습니다. 음수는 어떻습니까? 이진 시스템에서만 정보를 인식합니다. 빼기 기호도 이진 코드로 작성해야 하는 것으로 나타났습니다. 이는 직접 코드나 보완 코드를 사용하여 수행할 수 있습니다.

직접 코드

숫자의 부호에 최상위 비트(가장 왼쪽 비트)를 할당하는 이진법으로 숫자를 표현하는 방법. 숫자가 양수이면 가장 왼쪽 비트에 0이 기록되고, 음수이면 - 1이 기록됩니다.
8비트 숫자를 예로 들어 살펴보겠습니다.
Java 연산자 소개: 논리, 산술, 비트 - 13접근 방식은 간단하고 원칙적으로 이해하기 쉽습니다. 그러나 단점도 있습니다. 수학적 연산을 수행하는 데 어려움이 있습니다. 예를 들어 음수와 양수가 추가됩니다. 추가 조작을 하지 않으면 접을 수 없습니다.

추가 코드

추가 코드를 사용하면 직접 코드의 단점을 피할 수 있습니다. 숫자의 추가 코드를 얻는 간단한 알고리즘이 있습니다. 숫자 -5에 대한 추가 코드를 얻으려고 노력해 보겠습니다. 이진수 체계에서 2의 보수 코드를 사용하여 이 숫자를 표현해 보겠습니다. 1단계. 직접 코드를 사용하여 음수 표현을 얻습니다. -5의 경우 10000101이 됩니다. 2단계. 부호 숫자를 제외한 모든 숫자를 반전합니다. 모든 0을 1로 바꾸고, 가장 왼쪽 비트를 제외한 모든 곳에서 1을 0으로 바꾸겠습니다.

10000101 => 11111010
3단계. 결과 값에 1을 더합니다.

11111010 + 1 = 11111011
준비가 된. 2의 보수 코드를 사용하여 이진수 시스템에서 -5 값을 얻었습니다. Java는 2의 보수 코드를 사용하여 음수를 비트 단위로 저장하므로 이는 다음 자료를 이해하는 데 중요합니다.

비트 연산 유형

이제 모든 소개를 다루었으므로 Java의 비트 연산에 대해 이야기해 보겠습니다. 정수에 대해 비트 연산이 수행되고 그 결과는 정수입니다. 이 과정에서 숫자는 이진수로 변환되고 각 비트에 대해 연산이 수행되며 결과는 다시 십진수로 변환됩니다. 연산 목록은 아래 표에 나와 있습니다. Java 연산자 소개: 논리, 산술, 비트 단위 - 14이미 알아낸 것처럼 숫자는 비트 집합으로 표현될 수 있습니다. 비트 연산은 그러한 표현의 정확히 각 비트에 대해 연산을 수행합니다. 해 보자 NOT, AND, OR, XOR. 최근에 논리 피연산자에 대해서만 진리표를 살펴봤다는 점을 기억하세요. 이 경우 정수의 각 비트에 동일한 연산이 적용됩니다.

비트 단항 연산자 NOT ~

이 연산자는 모든 0을 1로 바꾸고 모든 1을 0으로 바꿉니다. 십진수 표기법으로 숫자 10이 있다고 가정해 보겠습니다. 이진수로 이 숫자는 1010입니다. 이 숫자에 단항 비트 부정 연산자를 적용하면 다음과 같은 결과를 얻습니다. Java 연산자 소개: 논리, 산술, 비트 - 15Java 코드에서 어떻게 보이는지 살펴보겠습니다.
public static void main(String[] args) {
   int a = 10;

   System.out.println(" a = " + a + "; binary string: " + Integer.toBinaryString(a));
   System.out.println("~a = " + ~a + "; binary string: " + Integer.toBinaryString(~a));
}
이제 콘솔에 표시되는 내용을 살펴보겠습니다.
Java 연산자 소개: 논리, 산술, 비트 - 25
첫 번째 줄에서는 앞에 0이 없는 이진수 시스템의 값을 얻었습니다. 우리가 볼 수는 없지만 거기에 있습니다. 이는 모든 비트가 역방향 비트로 변환된 두 번째 줄에서 입증됩니다. 이것이 우리가 그렇게 많은 주요 단위를 보는 이유입니다. 이는 첫 번째 줄에 인쇄될 때 컴파일러에서 무시되었던 이전의 선행 0입니다. 다음은 명확성을 위해 앞에 0을 표시하는 작은 프로그램입니다.
Java 연산자 소개: 논리, 산술, 비트 - 26

비트 AND 연산자

이 연산자는 두 개의 숫자에 적용됩니다. AND각 숫자의 비트 사이에서 연산을 수행합니다 . 예를 살펴보겠습니다. Java 연산자 소개: 논리, 산술, 비트 - 16이 작업은 두 개의 숫자에 대해 수행됩니다. Java 코드의 예:
Java 연산자 소개: 논리, 산술, 비트 - 28

비트 OR 연산자

OR은 두 개의 숫자에 적용됩니다. 각 숫자의 비트 사이에 OR 연산을 수행합니다. Java 연산자 소개: 논리, 산술, 비트 - 17이제 이것이 IDEA에서 어떻게 보이는지 살펴보겠습니다.
Java 연산자 소개: 논리, 산술, 비트 단위 - 30

비트 연산, 배타적 OR(XOR)

동일한 예를 새로운 작업으로 살펴보겠습니다. Java 연산자 소개: 논리, 산술, 비트 - 18예 코드:
Java 연산자 소개: 논리, 산술, 비트 - 32

왼쪽으로 비트 이동

이 연산자는 두 개의 피연산자에 적용 가능합니다. 즉, 연산에서 x << y숫자의 비트가 왼쪽으로 위치를 x이동합니다 . y무슨 뜻이에요? 연산의 예를 보면, 10 << 1 Java 연산자 소개: 논리, 산술, 비트 - 19연산의 결과는 십진수로 20이 됩니다. 위의 다이어그램에서 볼 수 있듯이 모든 비트는 왼쪽으로 1만큼 이동됩니다. 이 작업 중에 최상위 비트(가장 왼쪽 비트)의 값이 손실됩니다. 그리고 최하위 비트(가장 오른쪽 비트)는 0으로 채워집니다. 이 작업에 대해 무엇을 말할 수 있습니까?
  1. 숫자의 비트를 왼쪽으로 비트 단위로 이동하여 X숫자 NX2 N 을 곱합니다 .

    예는 다음과 같습니다.

    Java 연산자 소개: 논리, 산술, 비트 - 34
  2. 하지만! 값이 1인 비트가 가장 왼쪽 위치를 차지하면 숫자의 부호가 바뀔 수 있습니다.

  3. 무한히 왼쪽으로 이동하면 숫자는 단순히 0으로 바뀔 것입니다. 포인트 2와 3을 살펴보겠습니다.

    Java 연산자 소개: 논리, 산술, 비트 - 35

비트 오른쪽으로 이동

이 연산자는 두 개의 피연산자에 적용됩니다. 저것들. 연산에서 x >> y숫자의 비트는 오른쪽으로 위치를 x이동합니다 . y또 다른 예를 살펴보겠습니다. 동작을 개략적으로 분석해 보겠습니다 10 >> 1. 숫자 10의 모든 비트를 한 자리 오른쪽으로 이동해 보겠습니다. Java 연산자 소개: 논리, 산술, 비트 - 20이동 작업 중에 오른쪽 비트가 손실됩니다. 그들은 단순히 사라집니다. 가장 왼쪽 비트는 숫자의 부호입니다(0은 양수, 1은 음수). 따라서 최종 값에는 원래 숫자와 동일하게 배치됩니다. 음수의 예: Java 연산자 소개: 논리, 산술, 비트 - 21가장 오른쪽 비트는 손실되고 가장 왼쪽 비트는 숫자의 명예 기호로 원래 숫자에서 복사됩니다. IDEA에서 이 모든 작업을 수행하는 방법은 무엇입니까? 원칙적으로 복잡한 것은 없습니다. 그냥 가져가서 옮기세요.
Знакомство с операторами Java: логические, арифметические, побитовые - 38
지금. 오른쪽으로 이동한 숫자에 대해 무엇을 말할 수 있나요? 이는 2로 나누어집니다. 오른쪽으로 한 비트씩 이동할 때마다 원래 숫자를 2로 나눕니다. 숫자가 2로 나누어지지 않으면 결과는 음의 무한대 방향으로 반올림됩니다(아래쪽). 하지만 이것은 비트를 정확히 1만큼 이동하는 경우에만 작동합니다. 그리고 2비트로 나누면 4로 나누고, 3비트로 8로 나누고, 4비트로 16으로 나눕니다. X2의 거듭제곱... 숫자를 비트 단위로 오른쪽 으로 이동하면 숫자를 2의 2제곱으로 N나눕니다 . 데모: XN
public class BitOperationsDemo {

   public static void main(String[] args) {

    for (int i = 1; i <= 10; i++) {

        int shiftOperationResult = 2048 >> i;
        int devideOperationResult = 2048 / (int) Math.pow(2, i);


           System.out.println(shiftOperationResult + " - " + devideOperationResult);
    }

   }

}
여기서 무슨 일이 일어나고 있는 걸까요?
  1. 변수 i가 1에서 10까지 증가하는 루프입니다.

  2. 각 반복마다 2개의 값을 계산합니다.
    • shiftOperationResult숫자 2048을 오른쪽으로 i 비트만큼 이동한 결과를 변수에 씁니다.

    • devideOperationResult숫자 2048을 2의 i승으로 나눈 결과를 변수에 씁니다 .

  3. 얻은 두 값을 쌍으로 표시합니다.

프로그램을 실행한 결과는 다음과 같습니다. 1024 - 1024 512 - 512 256 - 256 128 - 128 64 - 64 32 - 32 16 - 16 8 - 8 4 - 4 2 - 2

패딩이 0인 비트 단위 오른쪽 시프트

일반적인 오른쪽 시프트는 숫자의 부호를 유지하지만(최상위 비트는 해당 값을 유지함) 0 채우기 오른쪽 시프트는 그렇지 않습니다. 그리고 가장 중요한 비트는 0으로 채워집니다. 그것이 어떻게 보이는지 봅시다: Знакомство с операторами Java: логические, арифметические, побитовые - 22

Java에서의 작업 우선 순위

수학과 마찬가지로 Java에도 연산 우선순위가 있습니다. 아래 표에는 우리가 고려한 작업의 우선순위(가장 높은 것부터 가장 낮은 것까지)가 나와 있습니다. Знакомство с операторами Java: логические, арифметические, побитовые - 23

유용한 사용 예

숫자의 패리티 결정

Знакомство с операторами Java: логические, арифметические, побитовые - 24

배열에서 최대 요소 찾기

Знакомство с операторами Java: логические, арифметические, побитовые - 25최소 요소를 찾으려면 올바른 위치에서 비교 기호를 변경하면 됩니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION