Sign In

[프로그래밍 언어] 4. Expressions and Assignment Statements

Y
Yerim
  1. Programming Language

타입 변환

축소 변환 vs 확장 변환

•
축소 변환: 근사치 값으로조차 저장할 수 없는 타입으로 변환 e.g. double → float
•
확장 변환: 모든 값들의 근사치를 포함할 수 있는 타입으로 변환 e.g. int → float

명시적 vs 묵시적

i = (int) angle; // 명시적 타입 변환
a = 1 + 1.5;     // 묵시적 타입 변환: 정수 1을 실수로 확장 변환
•
명시적 타입 변환: C, Java의 typecast
•
묵시적(강제적) 타입 변환: 컴파일러에 의해 수행 → Java에서 오류로 탐지하지 않음
◦
혼합형 식: 하나의 연산자 → 서로 다른 타입의 피연산자 → 묵시적 타입 변환 필요

관계식과 불리안 식

•
관계식: 두 피연산자의 값을 비교 → 결과값은 불리안 (C언어는 수치값)
◦
동등, 비동등 관계 연산자를 사용 (산술연산자보다 낮은 우선순위)→ 언어 마다 다름
•
불리안: 불리안 변수, 불리안 상수, 관계식, 불리안 연산자 (AND>OR)
◦
C언어는 불리안이 없음 → 0이면 거짓 (a>b>c의 경우 두 번째 연산이 진행되지 않음)

단락회로 평가

while((index < listen) & (list[index] != key)){}
// 단락회로: (index < listen)이 거짓 -> 뒤의 조건 비교 X
// 비단락회로: 항상 뒷부분도 비교 -> 첨자 이탈 예외 발생 가능
•
단락회로: 모든 피연산자와 연산자를 평가하지 않고 결정
•
비단락회로: 모든 연산자와 피연산자를 비교

배정문

if (x=y)          // C: x에 할당된 값 -> y=0인 경우 거짓, 그 외 참
                          // Java: 불리안 식만 가능 -> 컴파일러, 인터프리터 오류
a = b + (c=d/b)-1 // c는 d/b로 업데이트
sum = count = 0;  // sum와 count 모두에 0이 삽입
•
배정문: 변수에 대한 값의 바인딩 동적 변경
•
단순 배정문: 동등 기호(=)를 주로 사용
•
복합 배정 연산자: 필요한 형식을 명세하는 축약 e.g. sum+=value
•
단항 배정 연산자: C, Java의 ++과 -- → 연산 처리 순서에 따라 결과가 달라짐
•
식으로서의 배정문
◦
C, Java 배정문 결과를 생성하여 목적지에 할당
◦
배정 연산자는 왼쪽 피연산자를 변경
◦
다중 목적지 배정 효과

혼합 배정문

•
**C, C++**은 확장, 축소에 상관 없이 타입 강제 변환 규칙 사용
•
Java에서는 확장인 경우에만 타입 강제 변환 허용

타입 변환

축소 변환 vs 확장 변환

•
축소 변환: 근사치 값으로조차 저장할 수 없는 타입으로 변환 e.g. double → float
•
확장 변환: 모든 값들의 근사치를 포함할 수 있는 타입으로 변환 e.g. int → float

명시적 vs 묵시적

i = (int) angle; // 명시적 타입 변환
a = 1 + 1.5;     // 묵시적 타입 변환: 정수 1을 실수로 확장 변환
•
명시적 타입 변환: C, Java의 typecast
•
묵시적(강제적) 타입 변환: 컴파일러에 의해 수행 → Java에서 오류로 탐지하지 않음
◦
혼합형 식: 하나의 연산자 → 서로 다른 타입의 피연산자 → 묵시적 타입 변환 필요

관계식과 불리안 식

•
관계식: 두 피연산자의 값을 비교 → 결과값은 불리안 (C언어는 수치값)
◦
동등, 비동등 관계 연산자를 사용 (산술연산자보다 낮은 우선순위)→ 언어 마다 다름
•
불리안: 불리안 변수, 불리안 상수, 관계식, 불리안 연산자 (AND>OR)
◦
C언어는 불리안이 없음 → 0이면 거짓 (a>b>c의 경우 두 번째 연산이 진행되지 않음)

단락회로 평가

while((index < listen) & (list[index] != key)){}
// 단락회로: (index < listen)이 거짓 -> 뒤의 조건 비교 X
// 비단락회로: 항상 뒷부분도 비교 -> 첨자 이탈 예외 발생 가능
•
단락회로: 모든 피연산자와 연산자를 평가하지 않고 결정
•
비단락회로: 모든 연산자와 피연산자를 비교

배정문

if (x=y)          // C: x에 할당된 값 -> y=0인 경우 거짓, 그 외 참
                          // Java: 불리안 식만 가능 -> 컴파일러, 인터프리터 오류
a = b + (c=d/b)-1 // c는 d/b로 업데이트
sum = count = 0;  // sum와 count 모두에 0이 삽입
•
배정문: 변수에 대한 값의 바인딩 동적 변경
•
단순 배정문: 동등 기호(=)를 주로 사용
•
복합 배정 연산자: 필요한 형식을 명세하는 축약 e.g. sum+=value
•
단항 배정 연산자: C, Java의 ++과 -- → 연산 처리 순서에 따라 결과가 달라짐
•
식으로서의 배정문
◦
C, Java 배정문 결과를 생성하여 목적지에 할당
◦
배정 연산자는 왼쪽 피연산자를 변경
◦
다중 목적지 배정 효과

혼합 배정문

•
**C, C++**은 확장, 축소에 상관 없이 타입 강제 변환 규칙 사용
•
Java에서는 확장인 경우에만 타입 강제 변환 허용
Yerim-DevNote
Subscribe to 'Yerim-DevNote'
Subscribe to my site to be the first to receive notifications and emails about the latest updates, including new posts.
Join Slashpage and subscribe to 'Yerim-DevNote'!
Subscribe
👍