JavaRush /Java Blog /Random-KO /Java의 논리 연산자

Java의 논리 연산자

Random-KO 그룹에 게시되었습니다
Java의 논리 연산.  Java의 비트 연산 - 1

Java의 논리 연산

논리 연산은 부울 연산자를 사용하여 수행됩니다. 동어반복을 해서 죄송합니다. 그러나 이것이 바로 상황입니다. 프로그래밍 및 수학의 기본 논리 연산은 논리 인수(피연산자)에 적용될 수 있으며 숫자에 대한 산술 연산과 유사하게 더 복잡한 표현식을 형성하는 데에도 사용될 수 있습니다. 예를 들어 다음과 같은 표현식이 있습니다.

(a | b) | (c < 100) & !(true) ^ (q == 5)
는 4개의 피연산자로 구성된 복잡한 논리 표현식입니다: (a | b), 여기서 а및 는 b유형 변수입니다 boolean (c < 100) (true) (q == 5) . 또한 간단한 논리 표현식 (a | b)도 두 개의 피연산자 인수로 구성됩니다. 논리 피연산자는 true 또는 false, true 또는 false 라고 말할 수 있는 표현식입니다 . booleanJava 용어에서 부울 피연산자는 유형 또는 부울 의 표현식입니다 . 예를 들면 다음과 같습니다.
  • (2 < 1)— 논리 피연산자, 해당 값은 false 입니다.
  • true- 값이 명백히 참인 논리 피연산자
  • boolean a- 부울 a 와 같은 논리 피연산자일 수도 있습니다.
  • int a = 2- 논리 피연산자가 아니며 단지 유형의 변수일 뿐입니다.int
  • String a = "true"또한 논리 피연산자가 아닙니다 . 텍스트 값이 .인 문자열입니다 "true".
Java에서는 다음과 같은 논리 연산을 사용할 수 있습니다.
  • NOT반전 이라고도 하는 논리적 부정 입니다. !Java에서는 피연산자 앞에 “ ” 기호로 표시됩니다 . 하나의 피연산자에 적용됩니다.
  • 논리적인 and 는AND 접속사 이기도 합니다 . &적용되는 두 피연산자 사이에 “ ” 기호로 표시됩니다 .
  • 논리적 또는 Java에서는 - 이기도 하며 OR분리이기도 합니다. |Java에서는 두 피연산자 사이에 “ ” 기호로 표시됩니다 .
  • 배타적 또는 , XOR엄격한 분리. ^Java에서는 두 피연산자 사이에 “ ” 기호로 표시됩니다 .
  • Java에서 논리 연산자에는 조건부 또는 로 표시되는 조건부 및 - 가 ||포함 됩니다 .&&
참고: 또한 수학적 논리에서는 등가 관계, 즉 평등을 고려합니다. 그러나 Java에서는 항등 연산자가==논리 연산자로 간주되지 않습니다. 주목! Java에서는 논리 연산자&,|^정수에도 적용됩니다. 이 경우 약간 다르게 작동하며 비트 단위 (또는 비트 단위) 논리 연산자라고 합니다. 그들에 대해 - 기사가 끝날 무렵. 각 Java 논리 연산자에 대한 간략한 설명이 포함된 표를 살펴보고 아래에서는 이에 대해 더 자세히 설명하고 코드 예제를 제공합니다.
자바 연산자 이름 유형 간단한 설명
! 논리적 "아님"(부정) 단항 !x"x가 아님"을 의미합니다. 피연산자가 false 인 경우 true를 반환합니다 . 피연산자가 true 이면 false를 반환합니다 . boolean x = true;
그 다음에
// !x == false
& 논리 AND( AND, 곱셈) 바이너리 두 피연산자가 모두 true 이면 true를 반환합니다 . a = true;
b = false;
그 다음에
a & b == false
| 논리합( OR, 덧셈) 바이너리 피연산자 중 하나 이상이 true 인 경우 true를 반환합니다 . a = true;
b = false;
그 다음에
a | b == true
^ 논리적 배타적 OR( XOR) 바이너리 피연산자 중 하나만 true 인 경우 true 반환합니다 . 두 피연산자가 모두 true 또는 false 이면 false를 반환합니다 . 기본적으로 피연산자가 다르면 true를 반환합니다 . a = true;
b = false;
그 다음에
a ^ b == true
&& 조건부 AND(짧은 논리 AND) 바이너리 와 동일하지만 &왼쪽의 피연산자가 false 인 경우 &이 연산자는 두 번째 피연산자를 확인하지 않고 false 를 반환합니다.
|| 조건부 OR(짧은 논리 OR) 바이너리 와 동일하지만 |왼쪽의 연산자가 true 인 경우 연산자는 두 번째 피연산자를 확인하지 않고 true를 반환합니다.

JavaRush 과정의 논리 연산

논리적 연산에는 탈출구가 없으며 JavaRush 과정에서는 조건 및 부울 데이터 유형과 함께 첫 번째 수준에서 나타납니다. 프로그래머는 점차적으로 수학적 논리 방법을 사용하는 방법을 배웁니다. 논리적 구성을 통해 보다 확실한 조작을 위해서는 특정 프로세스에 대한 특정 손재주와 이해가 필요합니다. 따라서 이러한 작업은 대부분의 학생들이 더 이상 구문과 구성에 직접적으로 주의가 산만해지지 않고 작업의 본질을 탐구하려고 시도하는 멀티스레딩 퀘스트가 끝날 때 완전히 다른 수준에서 더 자세히 접근됩니다.

Java의 논리 연산.  Java의 비트 연산 - 2

논리 부정 연산자 !

이 연산자는 단항 연산자입니다. 즉, 단일 부울 표현식이나 피연산자에 적용됩니다. 다른 부정과 마찬가지로 이해하기 매우 간단합니다. 연산자는 단순히 표현식의 의미를 반대 방향으로 변경합니다. 부정 연산 수행의 진리표 또는 결과:
a 의 가치 !ㅏ
거짓 진실
진실 거짓
예. 논리적 부정 연산
public class Solution {
   public static void main(String[] args) {
       boolean a = true;
       System.out.println(!a); // here our boolean expression reverses its value
       System.out.println(!false); // non-false expression, as you might guess, will be equal to... what?
       System.out.println(!(2 < 5)); // expression (2 < 5) is true, so its negation is false

   }
}
프로그램의 출력은 다음과 같습니다.

false
true
false

논리 AND - & 및 조건부 AND - &&

논리 AND 또는 연결은 두 표현식에 적용되며 두 피연산자가 모두 true인 경우 에만 결과가 true가 됩니다 . 즉, aor 피연산자 중 하나가 bfalse 이면 두 번째 연산자의 값에 관계없이 표현식은 false a & b 됩니다 . true 가 숫자 1이고 false 가 0 이라고 가정하면 연산자는 일반 곱셈과 정확히 동일하게 작동합니다. 따라서 논리 AND를 종종 "논리적 곱셈"이라고 합니다. 그런데 이 사실은 연산자의 연산을 빠르게 기억 하고 논리 연산자 또는 연산자와 혼동하지 않는 데 도움이 됩니다 . 진리표 AND, 운영자의 작업 결과이기도 합니다.&&|&
a&b
진실 진실 진실
진실 거짓 거짓
거짓 진실 거짓
거짓 거짓 거짓
논리 AND는 접속사이기도 합니다. 예:
public class Solution {
   public static void main(String[] args) {
       boolean a = true;
       boolean b = false;
       boolean c = true;
       System.out.println(a & b); // if we multiply true by false, we will definitely get false
       System.out.println(a & c); // true to true will be true
       System.out.println(false & (2 > 5));
 System.out.println((2 < 5) & false);
 // regardless of the truthfulness of the expression in brackets, in which case we have to be content with false
   }
}
프로그램 결과:

false
true
false
false
연산자는 &&때때로 "짧은 AND"라고도 합니다. 연산자로 논리 피연산자를 사용할 때 동일한 결과를 생성합니다 &. 그러나 그의 작품 자체에는 차이가 있다. a & b따라서 표현식 ( )의 피연산자가 afalse 이면 피연산자의 값을 확인하는 것이 의미가 없다는 점을 이미 알아차렸습니다. 즉 , 연산 b결과는 확실히 false 입니다 . 따라서 두 번째 피연산자의 값이 근본적으로 필요하지 않은 경우 이를 사용하면 &&프로그램의 계산 횟수가 줄어듭니다. 예제의 모든 연산자를 &로 대체 &&하면 결과는 정확히 동일하지만 프로그램 자체는 조금 더 빠르게 실행됩니다(그러나 우리는 mili-micro에 대해 이야기하고 있기 때문에 이를 눈치 채지 못할 것입니다... 간단히 말해서 , 매우 작은 시간 단위).

논리 OR은 | 연산자이고, 조건부 OR은 || 연산자입니다.

Java의 OR 연산자는 기호로 표시됩니다 |. 논리적 OR 또는 분리는 두 표현식에 적용되며 두 피연산자가 모두 거짓인 경우에만 그 결과가 거짓이 됩니다 . 여기서 우리는 어느 정도 연산자의 경우와 동일한 그림을 관찰 &하지만 정반대입니다. 즉, 하나 이상의 피연산자가 true 이면 두 번째 연산자의 값에 관계없이 표현식이 참이a | b 되는 것이 보장됩니다 . 논리 곱셈처럼 동작하는 경우 OR은 논리 덧셈입니다. 즉, true 가 1이고 false 가 0이라고 가정하면 됩니다. 논리 덧셈은 일반 덧셈과 다르게 작동한다는 점을 기억하세요. 이 경우 1 + 1은 2가 아니라 1과 같습니다(이 시스템에는 숫자 2가 존재하지 않습니다). 때때로 분리는 0과 1의 최대값으로 이해되며, 이 경우 적어도 하나의 피연산자가 1( true ) 과 같으면 정확히 true를 얻습니다 . OR 진리표(연산자의 결과라고도 함) : &|
| 비
진실 진실 진실
진실 거짓 진실
거짓 진실 진실
거짓 거짓 거짓
논리합(분리라고도 함)의 예는 다음과 같습니다.
public class Solution {
   public static void main(String[] args) {
       boolean a = true;
       boolean b = false;
       boolean c = true;
       System.out.println(!a | b); // Compose the use of two logical operators: a == true, so !a, as we already know, is false.
       System.out.println(a | c);
       System.out.println((2 < 5) | false); // expression (2 < 5) is true, which means that for any second operand we get a true result
       System.out.println((2 > 5) | true);

   }
}
결과:

false
true
true
true
||대신에 조건부 OR 연산자 - 를 사용하면 |정확히 동일한 결과를 얻을 수 있지만 조건부 AND 의 경우와 &&마찬가지로 경제적으로 작동합니다. 첫 번째 피연산자가 true 인 경우 "실행"하면 값은 두 번째 피연산자는 확인되지 않지만 즉시 결과는 true 입니다 .

XOR Java - 논리적 배타적 OR - 연산자 ^

XOR, 모듈로 2 덧셈, 논리 XOR, 논리 뺄셈, 엄격한 분리, 비트 보수... 연산자는 ^부울 대수에서 많은 이름을 가지고 있습니다. 이 연산자를 두 피연산자에 적용한 결과는 피연산자가 다르면 이 되고, 피연산자가 같으면 거짓 이 됩니다. 따라서 0( false )과 1( true ) 을 빼서 비교하는 것이 편리합니다 . 진리표 XOR(연산자의 결과라고도 함) ^:
부울 a 부울 b a^b
진실 진실 거짓
진실 거짓 진실
거짓 진실 진실
거짓 거짓 거짓
예:
public class Solution {
   public static void main(String[] args) {
       boolean a = true;
       boolean b = false;
       boolean c = true;
       System.out.println(!a ^ b); // Compose the use of two logical operators: a == true, so !a, as we already know, is false.
       System.out.println(a ^ c);
       System.out.println((2 < 5) ^ false);
       System.out.println((2 > 5) ^ true);
   }
}
결과:

false
false
true
true

논리 연산의 우선순위

수학에서와 마찬가지로 프로그래밍 연산자도 동일한 표현식에 나타날 때 특정 실행 순서를 갖습니다. 단항 연산자는 이진 연산자에 비해 장점이 있고, 덧셈에 비해 곱셈(심지어 논리적)이 있습니다. 목록에서 논리 연산자의 순위가 높을수록 우선순위가 높아집니다.
  1. !
  2. &
  3. ^
  4. |
  5. &&
  6. ||
예를 살펴 보겠습니다. 결합과 분리( &|)의 우선순위는 서로 다릅니다.
public class Solution {
   public static void main(String[] args) {
       boolean a = true, b = true, c = false;
       System.out.println(a | b & c);
}
왼쪽에서 오른쪽으로 작업했다면, 즉 먼저 연산자를 적용한 |다음 - 를 적용했다면 false& 값을 받았을 것입니다 . 그러나 실제로 이 프로그램을 실행하면 논리 AND 연산자가 논리 OR 연산자보다 우선순위가 높으므로 출력이 true가 될 것입니다 . 혼동을 피하기 위해 무엇이 곱셈처럼 동작하고 무엇이 덧셈처럼 동작하는지 기억해야 합니다 . 우선순위를 변경할 수 있습니다. 학교 수학에서처럼 괄호를 사용하세요. 예제 코드를 약간 변경해 보겠습니다. &|&|
public class Solution {
   public static void main(String[] args) {
       boolean a = true, b = true, c = false;
       System.out.println((a|b)&c);
}
무슨 일이야? 먼저 대괄호 안에 논리적 덧셈을 사용한 다음 곱셈을 사용합니다. 결과는 false가 됩니다 .

복잡한 논리식

물론 부울 표현식과 연산자를 결합할 수도 있습니다. 기사 시작 부분의 표현을 기억해 봅시다.
(a | b) | (c < 100) & !(true) ^ (q == 5)
이제는 별로 무섭지 않은 것 같습니다. a, b및 의 값을 미리 결정한 후 해당 값을 표시하는 프로그램을 작성해 с보겠습니다 q. 복잡한 부울 표현식의 값을 계산하는 예
public class Solution {
   public static void main(String[] args) {
       boolean a = true;
       boolean b = false;
       int c = 25;
       int q = 2;
       System.out.println((a|b) | (c < 100) & !(true)^(q == 5));
   }
}
메모:q우리 변수 는 유형 int이지만 이것은 부울 표현식이고 위에서 숫자 2로 초기화했기 때문에 falseq == 5 와 같습니다 . 변수도 마찬가지입니다 . 이 숫자는 25와 동일하지만 (c < 100)은 true 와 동일한 부울 표현식입니다 . 이 프로그램의 결과: qc

true
복잡한 부울 표현식은 매우 복잡하고 분기가 많은 조건을 테스트하는 데 사용할 수 있지만 과도하게 사용해서는 안 됩니다. 코드를 읽기 어렵게 만듭니다.

비트별(비트별) 연산자

기사 시작 부분에서 연산자 &, |및 가 ^Java 정수 유형과 관련하여 사용될 수 있다고 언급했습니다. 이 경우에는 비트 연산자입니다. 한 자리는 1비트이므로 비트 단위라고도 하며 이러한 연산은 특히 비트에 대해 작동합니다. 물론 논리 연산자와는 다소 다르게 작동하며, 정확한 방법을 이해하려면 이진수 체계가 무엇인지 알아야 합니다. 그것에 대해 아무것도 모르거나 완전히 잊어버린 경우 먼저 Java: 비트 및 바이트 기사를 읽고 이진수 시스템에는 0과 1이라는 두 자리 숫자만 있고 모든 데이터가 있다는 점을 다른 모든 사람들에게 상기시키는 것이 좋습니다. 컴퓨터에서는 조건부 0과 1을 사용하여 정확하게 표현됩니다. 우리에게 익숙한 모든 숫자(십진수, 0에서 9까지 10개의 다른 숫자가 있으며 이를 사용하여 숫자를 씁니다)는 이진수 체계로 표시될 수 있습니다. 숫자 체계 기수(2)를 사용하여 열로의 순차 나누기를 사용하여 10진수를 2진수로 변환할 수 있습니다. 각 단계에서 나눗셈의 나머지 부분을 역순으로 기록하면 원하는 이진수를 얻을 수 있습니다. 예를 들어, 다음은 10진수 103을 이진수 표현으로 변환한 것입니다. Java의 논리 연산.  Java의 비트 연산 - 3

JavaRush 과정의 이진수 시스템

JavaRush 과정에서는 멀티스레딩 퀘스트(레벨 10, 강의 1)를 공부하면서 이진수 체계에 대해 이야기하고, 강의 후에는 통합을 위한 여러 작업이 있습니다. 그러나 이 주제는 전혀 어렵지 않으며, 아직 과정을 진행하지 않았더라도 아마 이해하게 될 것입니다.

&, |및 Java 외에도 ^비트 연산자도 사용합니다.
  • ~ 비트 부정 연산자
  • >>오른쪽으로 비트 시프트
  • >>>부호 없는 비트 오른쪽 시프트
  • <<왼쪽으로 비트 시프트
초보자에게 비트 연산자는 매우 혼란스럽고 인위적으로 보입니다. 그들은 교육 문제 해결을 제외하고는 자신에게 필요한 것이 무엇인지 이해하지 못하는 경우가 가장 많습니다. 실제로 효율적인 나눗셈과 곱셈을 구성하기 위해 최소한으로 사용할 수 있으며 전문가는 인코딩/디코딩, 암호화 및 난수 생성에 사용합니다.

비트 연산자 &, | 그리고 ^

이러한 연산자가 어떻게 작동하는지 예를 살펴보겠습니다. 두 개의 정수가 있다고 가정해 보겠습니다.
int a = 25;
int b = 112; 
우리는 그들에게 세 가지 작업을 적용 &하고 그 결과를 화면에 표시해야 |합니다 . ^프로그램 코드는 다음과 같습니다.
public class Solution {
   public static void main(String[] args) {

       int a = 25;
       int b = 112;

       int res1 = a & b;
       int res2 = a | b;
       int res3 = a ^ b;

       System.out.println("a & b = " + res1);
       System.out.println("a | b = " + res2);
       System.out.println("a ^ b = " + res3);

   }
}
프로그램의 결과는 다음과 같습니다.

a & b = 16
a | b = 121
a ^ b = 105
무슨 일이 일어나고 있는지 이해하지 못한다면 그 결과는 매우 신비스러워 보입니다. 사실 모든 것이 생각보다 간단합니다. 비트 연산자는 이진 형식의 피연산자 숫자를 "참조"합니다. 그런 다음 논리 연산자를 적용하거나 두 &숫자 의 해당 숫자(비트)에 적용합니다. 따라서 숫자 25의 이진 표현의 마지막 비트에 대해 논리적으로 숫자 112의 이진 표현의 마지막 비트에 추가되고, 끝에서 두 번째 비트와 끝에서 두 번째 비트가 더해집니다. 동일한 논리가 다음에서 추적될 수 있습니다. 의 경우 와 . |^&Java의 논리 연산.  Java의 비트 연산 - 4|^Java의 논리 연산.  Java의 비트 연산 - 5

왼쪽 또는 오른쪽으로 비트 이동

Java에는 여러 가지 비트 이동 연산자가 있습니다. 가장 일반적으로 사용되는 연산자 <<는 및 입니다 >>. 숫자의 이진 표현을 각각 왼쪽이나 오른쪽으로 이동하고, 이동하는 경우에는 기호를 유지하면서 오른쪽으로 이동합니다(아래에서 기호 보존이 무엇을 의미하는지 설명하겠습니다). 또 다른 오른쪽 시프트 연산자가 있습니다 >>>. 동일한 작업을 수행하지만 >>기호를 저장하지 않습니다. 그럼, 예를 들어 그들의 작업을 살펴보자. int a = 13 a << 1숫자 a의 이진 표현의 모든 비트를 1비트만큼 왼쪽으로 이동합니다. 단순화하기 위해 이진수 13을 0000 1101이라고 가정해 보겠습니다. 실제로 이 숫자는 다음과 같습니다. 00000000 00000000 00000000 00001101. Java는 int숫자에 4바이트 또는 32비트를 할당하기 때문입니다. 그러나 이는 예제에서는 아무런 역할을 하지 않으므로 이 예제에서는 숫자를 1바이트로 간주합니다. Java의 논리 연산.  Java의 비트 연산 - 6오른쪽의 비어 있는 비트는 0으로 채워집니다. 이 연산의 결과로 우리는 숫자 26을 얻습니다. a << 2숫자의 이진 표현의 모든 비트를 a왼쪽으로 2비트 이동하고 오른쪽에 비어 있는 두 비트는 0으로 채워집니다. 결과적으로 우리는 숫자 52를 얻게 될 것입니다. a << 3결과는 104가 될 것입니다... 패턴이 보이시나요? n 위치만큼 왼쪽으로 비트 이동하는 것은 a숫자 a에 2의 n승을 곱하는 것과 같습니다. 음수에도 동일하게 적용됩니다. 결과 는 -13 << 3-104가 됩니다. a >> n숫자 n 위치의 이진 표현을 오른쪽으로 이동합니다. 예를 들어, 13 >> 1 숫자 1101을 숫자 0110, 즉 6으로 변환합니다. 13 >> 2결과는 3이 됩니다. 즉, 여기서는 숫자를 2의 n승으로 나눕니다. 여기서 n은 교대 횟수입니다. 하지만 한 가지 주의 사항이 있습니다. 숫자가 홀수인 경우 이 작업 중에 숫자의 마지막 비트를 재설정하는 것처럼 보입니다. 그러나 부정적인 것의 경우 상황은 다소 다릅니다. 예를 들어, 프로그램이 작업을 수행하도록 요청하면 프로그램이 무엇을 생성할지 확인해보세요 -13 >> 1. 생각하는 것처럼 -6이 아닌 -7이라는 숫자가 표시됩니다. 이는 Java 및 기타 프로그래밍 언어에서 음수가 저장되는 방식으로 인해 발생합니다. 그것들은 보완 코드(complementary code)라고 불리는 곳에 저장됩니다. 이 경우에는 최상위 숫자(왼쪽 숫자)가 기호에 부여됩니다. 음수의 경우 최대 유효숫자는 1이다.

추가 코드

숫자를 생각해 봅시다 int a = 13. 프로그램에서 명령을 사용하여 이진수 표현을 콘솔에 인쇄하면 System.out.println(Integer.toBinaryString(a));1101을 얻게 됩니다. 실제로 이것은 유형 번호가 int메모리에서 4바이트를 차지하므로 컴퓨터가 더 많이 "인식"하므로 이는 약칭 표기법입니다. 이와 같이:

00000000 00000000 00000000 00001101
가장 중요한 숫자는 0입니다. 이는 양수가 있음을 의미합니다. 추가 코드로 변환하려면:
  1. 소위 "직접 코드"에 숫자 -13을 씁니다. 이렇게 하려면 숫자의 가장 중요한 숫자를 1로 변경하십시오.
    작업 결과:

    
    10000000 0000000 0000000 00001101
  2. 다음으로 부호 비트를 제외한 모든 비트를 반전시킵니다(0을 1로, 1을 0으로 변경). 사실 우리는 이미 그것을 변경했습니다.
    조치 결과:

    
    11111111 11111111 11111111 11110010

    (예, 1단계와 2단계를 결합할 수도 있지만 그렇게 생각하는 것이 더 좋습니다)

  3. 결과 숫자에 1을 더합니다.
    작업 결과:

    
    11111111 11111111 11111111 11110011
결과 이진수는 -13이며 2의 보수 코드로 작성되며 비트 이동(및 기타 작업)이 여기에 구체적으로 적용됩니다. 단지 모든 연산에서 연산 논리의 차이가 눈에 띄지 않을 뿐입니다. 왼쪽으로 동일한 이동에 대해 차이가 눈에 띄지 않는다고 가정해 보겠습니다. 양수와 동일한 방식으로 음수에 대해 작업할 수 있습니다. 이제 오른쪽으로 이동해 보겠습니다 -13 >> 1. 연산자가 >>부호를 유지하므로 이 작업에서 왼쪽에 해제된 모든 비트는 0이 아닌 1로 채워집니다. 따라서 숫자를 옮기면

11111111 11111111 11111111 11110011
한 비트 오른쪽으로 이동하여 다음과 같은 비트 시퀀스가 ​​생성됩니다.

11111111 11111111 11111111 11111001
이 숫자를 직접 코드로 변환하면(즉, 먼저 1을 뺀 다음 첫 번째 비트를 제외한 모든 비트를 반전) 숫자를 얻습니다.

10000000 00000000 00000000 00000111
또는 -7. 이제 우리는 부호 보존 오른쪽 시프트 연산자를 이해했으므로 연산자와 어떻게 다른지 명확해질 것입니다 >>>. a >>> n— 이 연산은 부호 없는 시프트입니다. 즉, 숫자의 이진 표현을 an 비트만큼 오른쪽으로 이동하지만 왼쪽에 비어 있는 n 비트를 연산자와 같은 1이 아닌 >>0으로 채웁니다. 작업을 해보자 -13 >>> 1. -13우리는 이미 2의 보수로 된 숫자를 가지고 있습니다 :

11111111 11111111 11111111 11110011
1비트 오른쪽으로 이동하고 여유 비트를 0으로 채움으로써 다음 숫자를 얻습니다.

01111111 11111111 11111111 11111001
십진수 표기법으로 숫자를 제공하는 것은 무엇입니까 2147483641?

비트 부정 연산자 ~

이 단항 연산자는 매우 간단하게 작동합니다. 즉, 정수의 이진 표현의 각 비트를 반대로 바꿉니다. 숫자를 보자 -13:

11111111 11111111 11111111 11110011
비트 부정 연산은 ~13단순히 각 비트의 값을 반대로 합니다. 결과적으로 우리는 다음을 얻습니다:

00000000 00000000 00000000 00001100
또는 12십진수 형태로 표시됩니다.

간략한 결론

  • 모든 논리 연산자는 부울 표현식, 즉 true 또는 false 라고 말할 수 있는 표현식에 적용됩니다 .
  • Если операторы &, | or ^ применяются к числам, речь идёт уже не о логических операциях, а о побитовых. То есть оба числа переводятся в двоичную систему и к этим числам побитово применяют операции логического сложения, умножения or вычитания.
  • В математической логике операторам & и | соответствуют конъюнкция и дизъюнкция.
  • Логическое И похоже на умножения 1 (true) и 0 (false).
  • Логическое ИЛИ напоминает поиск максимума среди 1 (true) и 0 (false).
  • Для побитового отрицания целого числа a используется операция ~a.
  • Для логического отрицания булевского выражения a используется операция !a.
  • Отрицательные числа хранятся и обрабатываются в дополнительном codeе.
  • Поразрядный сдвиг вправо может сохранять знак (>>), а может — не сохранять (>>>).
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION