[Java] &과 &&, |과 ||

하비·2024년 7월 21일
1

Java

목록 보기
1/13

오늘은 java에서 &과 &&, |과 ||에 대한 설명과 차이점을 알아보도록 하겠습니다.

검색을 해보니, 어떤 곳은 비트 연산자, 논리연산자 차이라고 하고, 어떤 곳은 조건문 앞뒤 전부 비교의 차이라고 하고..
'대체 어떤게 맞는 걸까' 더 혼란스러워지기만 했습니다

그래서 제대로 알아보도록 하겠습니다!

저와 같은 분들은 이 글이 서칭의 마침표가 되길..

C++을 배웠던 나..이제까지 조건문에 &&와 || 밖에 쓰지 않았는데???
&과 |은 무엇인가

&과 |

&와 |는 비트 연산자이다.

&

  • 비트 논리곱
  • 두 숫자를 2진법으로 변환 후 계산값을 10진법으로 나타낸다.
  • 각 자리의 숫자가 둘 다 1이면 1, 아니면 0으로 계산한다.
int num1=10; //1010
int num2=5; //0101
int num3=4; //0100

System.out.println(num1&num2); //0
System.out.println(num2&num3); //4

|

  • 비트 논리합
  • &과 마찬가지로 비트 연산을 한다.
  • 각 자리의 숫자가 둘 다 0이면 0, 아니면 1로 계산한다.
int num1=10; //1010
int num2=5; //0101
int num3=4; //0100

System.out.println(num1|num2); //15
System.out.println(num2|num3); //5

그러면 &&와 ||는 무엇인가?

&&과 ||

논리 연산자이다.
논리 연산자는 조건을 연산하기 위해 사용된다.
주어진 조건에 따라서 true나 false를 반환한다.

여기서 C++과 다른 점은
C++에서는 0보다 큰 숫자는 true, 0이면 false 이런 식으로 대체가 가능했는데, java에서는 대체가 불가능하다.
무조건 true, false여야 함!!

&&

  • 논리곱
  • 두 개가 모두 true일 경우만 true를 반환한다.
  • 나머지의 경우에는 false
System.out.println(0&&1); //The operator && is undefined for the argument type(s) int, int

System.out.println(true&&true); //true
System.out.println(true&&false); //false
System.out.println(false&&true); //false
System.out.println(false&&false); //false

||

  • 논리합
  • 두 개가 모두 false일 경우만 false를 반환한다.
  • 나머지의 경우에는 true
System.out.println(0||1); //The operator && is undefined for the argument type(s) int, int

System.out.println(true||true); //true
System.out.println(true||false); //true
System.out.println(false||true); //true
System.out.println(false||false); //false

하지만

&과 |도 true, false로 연산할 경우, 같은 결과가 나온다.

System.out.println(true&true); //true
System.out.println(true&false); //false
System.out.println(false&true); //false
System.out.println(false&false); //false

System.out.println(true|true); //true
System.out.println(true|false); //true
System.out.println(false|true); //true
System.out.println(false|false); //false

그럼 &과 &&(|과 ||) 차이점은 뭘까???

차이점

&과 &&, |과 ||의 차이점은 바로, 앞뒤 조건을 다 실행하느냐, 앞에만 보고 끝나느냐의 차이가 있다.

Integer num1=10;
Integer num2=5;
Integer num3=null;
		
System.out.println(num1<num2&&num2>num3); //false
System.out.println(num1<num2&num2>num3); //NullPointerException 발생

System.out.println(num1>num2||num2>num3); //true
System.out.println(num1>num2|num2>num3); //NullPointerException 발생

&&의 경우, 10<5가 false이기 때문에 뒤의 조건문을 실행시키지 않고, 바로 값을 반환했다.

&의 경우, 앞이 false임에도 뒤의 num2>num3을 계산했고, num3이 null이기 때문에 계산할 수 없어 NullPointerException이 발생하였다.

|과 ||의 경우도 동일하다.

이렇게

&과 &&, |과 ||의 정확한 개념과 차이를 알아보았습니다.
블로그 글을 정리하면서 저도 다시 머리속에 정리가 되네요!

profile
멋진 개발자가 될테야

0개의 댓글