int a;

a = 12 << 3;
System.out.println(a);

/*

<< 는 shift 연산이다. 

0000 1100 이면 0110 0000 으로 바꾸라는 의미.

값은 96이다.

*/

a = 12 >> 3;
System.out.println(a);

/*

0000 1100 을 0000 0001로 바꾸라는 의미.

값은 1이다.

*/

a = -32 >> 3;
System.out.println(a);

/*

0010 0000 를 2의 보수로 저장

1110 0000 임. 이것을 1111 1100으로 바꿈. 이것은 -4이다. 

*/
a = -32 >>>3;
System.out.println(a); 

/*

>>> 연산은 이것만 존재( <<<는 없다)

이것은 빈공간에 0을 채운다. 

예를 들어

1110 0000 이었던 것을 0001 1100이 되는 것임. 

그래서 값은 저렇게 나온다고 함.

*/

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0705_Ex14_Operator  (0) 2021.07.06
0705_Ex13_Bit  (0) 2021.07.06
0705_Ex11_Bit  (0) 2021.07.06
0705_Ex10_Bit  (0) 2021.07.06
0705_Ex09_Logical  (0) 2021.07.05

int a, b, c;
a = 10;
b = 5;

 

c = a;
a = b;
b = c;
System.out.println(a + "," + b);

/*

a 와 b의 위치를 바꿀 때. 새로운 위치 c를 설정해서 바꿈.

*/

 

a = 10;
b = 5;
a = a ^ b;
b = b ^ a;
a = a ^ b;
System.out.println(a + "," + b);
/*

1010

0101 XOR연산

1111 를 a에 넣는다. 15.

 

0101

1111 XOR 연산

1010 을 b에 넣는다. 10

 

1111

1010 XOR

0101 을 a에 넣는다. 5

다른 새로운공간c를 사용하지 않고 바꾸는 방법,

*/


a = 17;
b = 13;
System.out.println(a);

a = a^b;
System.out.println(a);

/*

0001 0001

0000 1101 XOR연산

0001 1100 을 a에 저장한다. 28

*/

a = a ^ b;
System.out.println(a);

/*

0001 1100

0000 1101 XOR 연산

0001 0010 을 a에 저장한다. 17.

*/

즉 XOR 연산을 두번하면 자신의 값이 됨. 

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0705_Ex13_Bit  (0) 2021.07.06
0705_Ex12_Bit  (0) 2021.07.06
0705_Ex10_Bit  (0) 2021.07.06
0705_Ex09_Logical  (0) 2021.07.05
0705_Ex08_Logical  (0) 2021.07.05

int a = 12;
int b = 6;
int c;

c = ~b;
System.out.println("~6:"+c);

/*

0000 0000 0000 0000 0000 0000 0000 0110  (길어서 0000 0110 라고하겠음)

1111 1111 1111 1111 1111 1111 1111 1001 이게 c의 값이다.

이것은 2의 보수로 저장되어있는 음수 # 임. 근데 #을 모르니까 다시 2의 보수를 취한다.

0000 0000 0000 0000 0000 0000 0000 0111 이다. 

즉 

~6:-7 이다.

*/

 


c = a&b;
System.out.println(c);

/*

& 연산자가 한 개만 사용 되었으므로 비트연산자이다.

1100

0110 을 AND 연산하면 

0100 이다. 따라서 4.
*/


c = a|b;
System.out.println(c);

/*

| 연산자가 한 개만 사용되었으므로 비트연산자.

1100

0110 을 OR연산하면

1110 이다. 따라서 14.

*/


c = a^b;
System.out.println(c);

/*

^연산은 XOR연산.

1100

0110 을 XOR연산하면. 

1010 이다. 따라서 10.

*/

a = 13;
b = a & 1;
System.out.println(b);

/*

1101

0001 AND 

0001 따라서 1.

*/

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0705_Ex12_Bit  (0) 2021.07.06
0705_Ex11_Bit  (0) 2021.07.06
0705_Ex09_Logical  (0) 2021.07.05
0705_Ex08_Logical  (0) 2021.07.05
0705_Ex07_Logical  (0) 2021.07.05

a = 20; b = 20;

c=++a>20 && ++b>20;

++a는 a값에 +1하는 것이 먼저. 이므로 21>20 true. 뒤에도 21>20 true. 

21, 21, true

a = 20; b = 20;
c = ++a>20 || ++b>20;

|| 연산은 앞이 true면 뒤 연산을 안하므로 

21, 20, true 가 나옴.

a = 20; b = 20;
c = ++a>20 && b++>20;

&&연산은 앞이 true 이면 뒤를 확인함. 뒤는 b의 값을 먼저 쓰고 그 후에 +1을 해주므로 false.

21, 21, false.

a = 20; b = 20;
c = a++>20 && ++b>20;

앞이 false이므로 뒤 b는 연산하지 않음. 

21, 20, false

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0705_Ex11_Bit  (0) 2021.07.06
0705_Ex10_Bit  (0) 2021.07.06
0705_Ex08_Logical  (0) 2021.07.05
0705_Ex07_Logical  (0) 2021.07.05
0705_Ex06_Relational  (0) 2021.07.05

a = 10;
b1 = false;
b2 = a>20 && (b1=true);

 

&& 연산은 둘 다 true이어야 한다.

하지만 a>20 에서 바로 false 이므로 뒤는 true 던 false던 false이므로 단축연산을 한다.

따라서 뒤에는 계산하지 않으므로 false, false가 출력된다.

 

a = 10;
b1 = false;
b2 = a<20 || (b1=true);

 

||연산은 앞부분이 true 면 뒤는 true 던 false던 true 이므로 단축연산을 한다.

뒤는 계산하지 않으므로 false, true 가 출력된다.

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0705_Ex10_Bit  (0) 2021.07.06
0705_Ex09_Logical  (0) 2021.07.05
0705_Ex07_Logical  (0) 2021.07.05
0705_Ex06_Relational  (0) 2021.07.05
0705_Ex05_Operator  (0) 2021.07.05

비트연산에서는 & 와 |는 한 번만 쓰지만 논리연산이므로 두 개씩 써야함.

AND 연산은 둘다 참일때만 참이므로 a && b 는 false

OR 연산은 하나만 참이어도 참이므로 a || b 는 true

 

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0705_Ex09_Logical  (0) 2021.07.05
0705_Ex08_Logical  (0) 2021.07.05
0705_Ex06_Relational  (0) 2021.07.05
0705_Ex05_Operator  (0) 2021.07.05
0705_Ex04_Circle : 반지름을 입력 받아 원의 넓이와 둘레 계산  (0) 2021.07.05

c = a > b; 10 > 5 참이므로 true

a < b ; 10 < 5 거짓이므로 false

=는 할당하는 연산자 이므로 같다는 연산은 == 두개를 씀.

10 = 5 거짓이므로 false

10 != 5 참이므로 true

 

boolean true 혹은 false 만 표시한다.

a++ 

++a

--a

a-- 연산에서는 형 변환이 일어나지 않는다. 따라서 연산이 빠르다.

 

a = 10;
b = ++a;
이면  a = a+1; b = a; 와 같은 의미이다. (완전 같은 것은 x) 

a값을 먼저 + 1하고 그 값을 b에 넣는다.

 

a = 10;
b = a++;

이면 b = a; a = a+1; 와 같은 의미이다.

a값을 먼저 b에 넣고 그 후에 a값을 + 1 한다.

 

 

 

 

+ Recent posts