2. Precedence and Associativity of Operators
Operators
( )
[ ]
++(prefix)
+(unary)
.
->
Associativity
--(postfix)
left to right
--(prefix)
!
~
sizeof(type)
-(unary)
&(address)
*(dereference)
right to left
*
++(postfix)
/
%
-
<<
<
<=
left to right
>>
+
left to right
left to right
>
==
>=
left to right
!=
left to right
&
^
/=
left to right
? :
*=
left to right
||
-=
left to right
&&
+=
left to right
|
=
left to right
right to left
%=
>>=
<<=
&=
^=
|=
right to left
2
6. Increment and Decrement Operators
Increment operator
Postfix k++
Prefix ++k
k = k - 1 ; 와 동일
Decrement operator
Postfix k-Prefix --k
k = k - 1 ; 와 동일
그러나 다른 연산자와 함께 사용되면 차이가 있음.
Prefix : operand가 사용되기 전에 먼저 증가/감소 시킴
Postfix : operand가 사용된 후에 증가/감소 시킴
6
7. Increment and Decrement Operators
[Ex]
int i = 4, j;
j = ++i + 3;
printf(“i : %d, j = %dn”, i, j);
j = i++ + 3;
printf(“i : %d, j = %dn”, i, j);
j = --i + 3;
printf(“i : %d, j = %dn”, i, j);
j = i-- + 3;
printf(“i : %d, j = %dn”, i, j);
i를 먼저 증가시킨 후,
j는 그 값에 3을 더함
j는 i에 3을 더한 값이 되고
그 후에 i를 1증가시킴
i = 5,
i = 6,
i = 5,
i = 4,
j
j
j
j
=8
=8
=8
=8
7
8. Bit Operators
<<, >>, |, &, ^,~
– << : 왼쪽으로 주어진 수 비트만큼 shift
a = 100 << 1 ;
printf( “%d”, a )
100 -> 01100100 이므로
왼쪽으로 한비트 shift하면
11001000 (=200)
– >> : 오른쪽으로 주어진 수 비트만큼 shift
a = 100 >> 1 ;
printf( “%d”, a )
100 -> 01100100 이므로
오른쪽으로 한비트 shift하면
001100100 (=50)
8
9. Bit Operators
<<, >>, |, &, ^,~
– | : 비트끼리 OR 연산
a = 100 | 200 ;
printf( “%d”, a )
– & : 비트끼리 AND 연산
a = 100 & 200 ;
printf( “%d”, a )
– ^:비트끼리 XOR
a = 100 ^ 200 ;
printf( “%d”, a )
(8bit 컴퓨터)
100 -> 01100100
200 -> 11001000 이므로
------------------a
= 11101100 (236)
100 -> 01100100
200 -> 11001000 이므로
------------------a
= 01000000 (64)
100 -> 01100100
200 -> 11001000 이므로
------------------a
= 10101100 (172)
9
11. Example
[Ex]
i = 3 , j = 2 , k = 1;
if ( i > j > k ) printf( “Yes” );
else printf( “No” );
[Ex]
int a, i =1, j = 2, k;
a = i < 2 + j;
j = 5 * (k = 3);
printf( “%d %d %dn”, a, i, j, k );
수학적인 표현의 의미로, j 가 i 와 k의 중간에 있다는
( i < j ) && ( j < k )
11
12. Example
Example
int a = 5, b = 6, c = 7;
int d;
printf( “%d %d %dn, a < b, a > b, a != b );
d = (a < b) && (b < c );
printf( “%d %d %dn”, d, (a > b) || (b > c), !(!5) );
12
13. Assignment Operators
Compound Assignment
– Compound Assignment operators
*=, -=, /=, %=, +=
op= [Ex]
– variable = variable op (expression)
=> variable op= expression
[Ex]
int k = 5;
k += 2;
k -= 2;
k *= 2;
k /= 2;
k %= 2;
/*
/*
/*
/*
/*
k = k + 2,
k = k - 2,
k = k * 2,
k = k / 2,
k = k % 2,
Left와 right side에 동일
variable을 사용하는 경우
compound assignment 로
simplify 가능
k=7
k=5
k=10
k=5
k=1
*/
*/
*/
*/
*/
13