'조건연산자'에 해당되는 글 2건

  1. 2016.01.26 루아(Lua)의 부울형과 조건연산자 3
  2. 2015.05.19 C/C++의 조건 연산자(?:)

 루아에서는 부울형(bool type) 데이터로 true/false 가 있으며 각각 참과 거짓을 표현한다.

 

a = true -- 변수 a에 ‘참’을 대입
x = false -- 변수 b에 ‘거짓’을 대입

 

true/false 는 보통 조건식의 결과이다. 조건식에 쓰이는 연산자(조건 연산자)는 다음과 같은  것들이 있다.

 

조건연산자 의미
x == y
x ~= y
x와 y가 같으면 true 반환
x와 y가 다르면 true 반환 (주의)
x > y
x >= y
x보다  y가 크면 true 반환
x보다  y가 크거나 같으면 true 반환
x < y
x <= y
x보다  y가 작으면 true 반환
x보다  y가 작거나 같으면 true 반환

 

같다 다르다는 ‘==’과 ‘~=’ 이다. ‘다르다’의 경우 다른 언어에서 많이 쓰이는 ‘!=’과는 문법이 다르니 유의해야 한다.

 

print (1==1)
a  = 2 ~= 2
b = 3
c = b == 3 -- 변수 c에는 부울값이 저장된다.
print(a, c)
d = 4
print(b<d)
실행 결과
true
false true
true

 

정수형의 상등/대소 조건 판별은 아무런 오류가 발생하지 않으나 실수의 경우는 그렇지 않다.(루아도 C/C++ 에서의 실수 비교와 같은 문제를 가지고 있다.)

 

print (0.3 == 0.1*3)
a = 0.2 + 0.2 + 0.2
b = 0.6
print (a, b, a==b)
실행 결과
false
0.6 0.6 false

 

이 예에서 보면 0.1*3 과 0.3은 다르다고  판별되고 0.2를 세 번 더한 것과 0.6이 다르다고 출력된다. 이진수에 대한 지식이 있다면 0.1이나 0.2는 정확하게 이진수로 표현될 수 없으므로 내부적으로 (약간) 부정확한 수가 저장되며 이러한 값들의 연산과 비교 역시 부정확하게 된다는 사실을 알 수 있다. 이 사실은 >=, <= 비교 연산에 대해서도 동일하게 적용된다.

 

a = 0.2 + 0.2 + 0.2
b = 0.6
print (a, b, a<=b)
실행 결과
0.6 0.6 false

 

따라서 실수값 사이의 같다/다르다 판별은 가급적 하지 않는 것이 좋으며 부득이할 경우에는 충분히 주의를 해야 예기치 않은 논리적 오류를 막을 수 있다.   

 

 

'프로그래밍언어.Lib > 루아(Lua)' 카테고리의 다른 글

루아(Lua)의 nil  (0) 2016.01.26
루아(Lua)의 문자열  (0) 2016.01.26
루아의 산술 연산자  (0) 2016.01.25
루아(Lua)의 숫자형  (0) 2016.01.25
루아(Lua)의 식별자 만드는 규칙  (0) 2016.01.25
Posted by 살레시오
,

3.6 조건연산자    [doc]    [smts]

조건 연산자(혹은 삼항 연산자라고도 한다)의 형식은 다음과 같다.


(조건식) ? 표현식1 : 표현식2;

조건연산자는 조건식이 참일 경우에는 표현식1을 선택(혹은 수행)하고, 거짓인 경우에는 표현식2를 선택(혹은 수행)시키는 연산자이다. 표현식에는 상수, 변수, 수식, 함수 호출 등이 올 수 있다.


예를 들어보면 다음과 같다.


(fa > fb)? printf(“true”):printf(“false”);
ir = ( i > j ) ? 1 : 0 ;
ir = ( ca == cb ) ? (ia+ib) : (ia-ib) ;

이 연산자는 if~else 문을 줄여서 쓴 형태라고 볼 수 있으며 if~else보다 간결하므로 단순 비교의 경우에는 자주 사용된다.


이것을 이용하여 두 수 중 큰 것을 구하는 간단한 프로그램을 작성해 보자.


int ia = 5, ib = 7, max;
max = (ia>ib)? ia:ib;

이 프로그램을 다음과 완전히 동일하다.


int ia=5, ib = 7, max;
if (ia>ib) {
  max = ia;
} else {
  max = ib;
}

또 다른 예를 들어보자.


ex03-08.c
#include<stdio.h>
int main()
{
  char cA = 'A', cB = '0';
  unsigned short usA;
  usA = (cA == 'A')? 1:0;
  printf("usA:%d\n", usA);
  (cB == 48)? printf("cB:'0'\n"):printf("cB: not '0'\n");
}

실행 결과

usA:1
cB:'0'

 조건 연산자는 사용 빈도가 높은 편이므로 잘 익혀두어야 한다.



'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글

C/C++의 대입연산자  (0) 2015.05.20
C/C++의 증감연산자(++, --)  (0) 2015.05.19
C/C++의 논리 연산자  (0) 2015.05.19
3.4 관계 연산자  (0) 2015.05.19
3.2 산술 연산자와 부호 연산자  (0) 2015.05.19
Posted by 살레시오
,