본문 바로가기
컴퓨터공학/자바프로그래밍

4. 변수의 형 변환과 기본 연산자

by meow0110 2024. 6. 5.

■ 연산자

- 프로세서 내의 연산 장치를 사용하기 위한 수단

- 논리 연산을 기본으로 함

 

■ 논리 회로

- 대표적인 연산자 : AND, OR, XOR, NOT (NAND, NOR, XNOR는 not을 붙인 것이라 생각하자.)

- 프로세서의 기본 소자

 

■ NOT

- 0을 1로 / 1을 0으로

 

AND (논리곱)

- 둘중의 하나가 0이면 0 (어느 하나라도 0이면 0이다.)

- 둘다 1이어야지 1

 

■ OR (논리합)

- 둘중의 하나만 1이어도 1

- 둘 다 0이어야지 0

- 논리곱과는 반

 

■ XOR (익스클루시브 OR / 배타적 논리합)

- 서로 다르면 1

- 서로 같으면 0 (1,1=0 / 0,0=0)

 

■ 대입 연산자 ( = , equal, 이꼴)

- 같다가 아니다. 우변의 [결과값, 값]을 좌변에 [Copy, 저장]이다.

- 좌변에는 변수(저장 공간)만 올 수 있다.

- 결론적으로 좌변은 저장공간 / 우변은 값이라 보면 된다.

 

■ Literal (상수값 /  문자, 숫자가 있다. 문자에 대해 알아보자)

 

■ 아스키 문자

- 1byte에 0~127개까지 표현 가능하다. 

- 공백은 ' ' 이다. 즉 '' 안에 공백이 있어 이렇게 쓸 수 있다.

 

■ 문자

- '' 안에 쓴다. 예를들면 'A'이다.

 

■ 이스케이프 문자

- ' ₩n' 에서 n은 문자가 붙는 것이다.

- 일종의 특수 문자이다. 이 키보드 자판에 표현할 수 없는 문자를 표현할 때 쓴다.

 

■ 유니 코드

- 유니코드는 2byte를 사용한다.

- 자바의 문자형은 2byte이다. 그래서 유니코드를 쓸 수 있다.

- 만약 자바가 아닌 C언어라면 오류가 생긴다. 왜? C언어 문자형은 1byte 이기 문에

 

■ 아스키 코드 값

- ch= 'A';  와 ch=0x41;은 값다.

- 왜냐하면 아스키 코드에서 A는 0x41 이기때문에, 자바에서는 문법적으로 허용이 된다.

 

■ Literal (상수값 / 숫자에 대해 알아보자.)

- 우리가 앞서 배울때, 몇 bit로 이루어져 있냐에 따라 byte short int long로 구분했다.

- 그러나 상수값에서 숫자는 몇 진수인가에 따라 앞에 붙는게 달라진다.

 

■ 정수

진수 표현 표기법 얼마나 쓰이는가
10진수 아무것도 안 붙인다. 자주 쓰인다.
2진수 0b 로 시작된다. 가끔 쓰인다.
8진수 0 로 시작된다. 거의 안쓴다.
16진수 0x 로 시작된다. 대부분 쓰인다.

 

■ 실수 - 소수점 표기

- 대부분의 실수 표현법

 

■ 실수 - 지수표기

- 공학에서 쓰는 방법

- 여기서 3.14e-10은   3.14 x 10^-10 이라 보면 된다.

- 즉, e는  밑수 10을 의미하고, 대문자(E)도 가능하다.

 

■ 이스케이프에 대해

- 줄바꿈, 복귀, ₩, ' , "  이렇게 많이 쓰이는 것만 기억해두자.

 

■ char ch1 = '1';

- 문자이다.

 

■ char ch2 = 1;

- 숫자이다.

 

■ 비트 연산자

- 일반적으로 byte 단위로 계산함. 그러나 비트 단위로 계산이 필요한 경우도 있다.

- 근데 앞서 봤던 Byte 단위의 계산과 방식이 동일하다.

- 즉, 소프트웨어는 Byte로 처리한다.그런데 bit단위로 조절해주는 것이 bit 연산자이다.

- Byte > bit > gate를 통과 > gate를 통과하면서 NOT AND OR XOR로 계산하는 것이다.

 

 

■ NOT

 

■ AND

1011 1000   a

1100 0011   b

1000 0000  a&b의 결과값

 

■ OR

1011 1000   a

1100 0011   b

1111 1011   a|b의 결과값

 

■ XOR

1011 1000   a

1100 0011   b

0111 1011   a^b의 결과값

 

■ 위의 문제풀이는 따로 안나와서 모른다. bit set, bit mask만 알아두자.

 

■ bit set

- 한 비트를 무조건 1 로 만드는 것

 

■ bit mask

- 한 비트를 무조건 0으로 만드는 것

 

 

1.  비트 이동 연산자   << 에 대해

-예시

1010 1100  

1011 0000   

붉은색 : 이동

파란색 : 버려짐

밑줄친 검정색 : 새로 채워야할 부분.  0으로 채우면 된다.

 

 

2.  비트 이동 연산자   >> 에 대해

2가지 경우가 있다. (음수, 양수)

 

■ >> 양수일 때 :  

- 제일 앞 MSB가 0이다.

- 왜냐하면 1byte 기준 [ -128 ~ 127 ]까지 표현이 가능하다.

- 그리고 양수일 때는 0~127까지다. 그리고 127은 0111 1111 이다. 그래서 제일 앞이 항상 0 이다.

-예시

0101 0011

0000 1010

붉은색 : 이동

파란색 : 버려짐

밑줄친 검정색 : 새로 채워야할 부분. 여기서는 그냥 0 으로 채우기만 하면 된다.

 

■ >> 음수일 때 : 

-예시

1010 0011 

1111 0100  

붉은색 : 이동

파란색 : 버려짐

밑줄친 검정색 : 새로 채워야할 부분. 여기서는제일 앞(밑줄 친 붉은색)이 1이기 떄문에 111로 채운다.

 

3.  비트 이동 연산자   >>> 에 대해

- 이 경우는 빈자리는 무조건 0 으로 채운다.

 

 

 

 

■ AND

- 참 참 = 참

- 참 거짓 = 거짓

- 거짓 거짓 = 거짓

 

■ OR
- 참 참 = 참

- 참 거짓 = 참

- 거짓 거짓 = 거짓

 

■ NOT

- 참은 거짓으로

- 거짓은 참으로

 

■ 참고

- 앞서 배웠던 & | ~의 경우는 [bit별 연산자]이다.

- [논리 연산자]는 Boolean 이라고 해서 true false로 구별한다.

 

■ 1byte정수값 + 1byte정수값  을 더하는 회로

■ 참고로 컴퓨터는 산술 연산(+ - * / )을 별로 안좋아한다. 자원을 많이 잡아먹으니까. 힘들다!

■ 그래서 앞서 배웠던, 비트연산자와 논리연산자를 좋아한다. 

 

■ % 모듈러 연산자

- 한마디로 나눗셈을 하고 남은 나머지를 말한다. 몫이 아닌!

- 꽤 자주 쓰인다. 언제? 예를 들면 3의 배수를 찾아라!.  3으로 나눴을 때 나머지가 0이면 3의 배수이니까.

 

 

■ 복합 대입 연산자

- 무슨 말인가? 아래의 예시를 참고

- ( a += b; )  a와 b를 더해라. 그리고 그것을 a에 넣어라.   결론  a = a + b;

-결론은 a 와 b를 계산하고 a에 넣으면 된다!

 

 

■ 증감 연산자

 

 

 

 

 

 

■ 형 변환

- 변수 형을 프로그램 수행 중에 변경하는 것

- 자동 형 변환은 정보 손상이 없을 때 이루어짐

- 강제 형 변환은 개발자가 정보 손상에 대한 책임을 짐

 

 

 

 

 

 

 

학습정리

1. 연산자

  • 프로세서의 논리 회로를 사용함
  • 논리 회로를 기반으로 다양한 연산자들이 만들어지고 제공됨

2. 연산자의 종류 및 특징

  • 대입 연산자: r-value를 l-value로 복사
  • 비트 연산자: 비트 별로 연산할 수 있는 방법을 제공
  • 논리 연산자: 논리 값을 피 연산자로 하여 논리 값을 결과로 내어 놓는 연산자
  • 산술 연산자: 더하기, 빼기, 곱하기, 나누기를 수행
  • 관계 연산자: 두 가지 값의 관계를 확인하며, 그 결과는 논리 값임