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

  1. 2016.01.26 루아(Lua)의 부울형과 조건연산자 (1)
  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 false
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
루아(Lua)의 부울형과 조건연산자  (1) 2016.01.26
루아의 산술 연산자  (0) 2016.01.25
루아(Lua)의 숫자형  (0) 2016.01.25
루아(Lua)의 식별자 만드는 규칙  (0) 2016.01.25
Posted by 살레시오

댓글을 달아 주세요

  1. 사랑 2020.04.28 14:34  댓글주소  수정/삭제  댓글쓰기

    혹시 c = b==d 는 true 아닌가요?
    잘보고있어요^^ 도움많이돼요

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
C/C++의 논리 연산자  (0) 2015.05.19
3.4 관계 연산자  (0) 2015.05.19
3.2 산술 연산자와 부호 연산자  (0) 2015.05.19
Posted by 살레시오

댓글을 달아 주세요