Major Study./Computer Science

논리연산자, shift operations

sosal 2014. 7. 17. 15:32
반응형

/*

 * http://sosal.kr/

 * made by so_Sal

 */



Logic operations. these operations refer to those operations that apply the same basic opeation 
 on individual bits of a pattern, or on two corresponding bits in two patterns.

비트레벨 논리동작을 우리가 정의할 수 있다는것을 의미한다네요.

A bit can take one of the two values : 0 or 1. 
0 : false
1 : true

NOT
1 -> 0
0 -> 1

AND (both digits should 1 -> true)
0 & 0 -> 0
0 & 1 -> 0
1 & 0 -> 0
1 & 1 -> 1

OR (if 1 exists -> true)
0 | 0 -> 0
0 | 1 -> 1
1 | 0 -> 1
1 | 1 -> 1

XOR (both digits is same -> true, differ -> false)
0 )| 0 -> 0
0 )| 1 -> 1
1 )| 0 -> 1
1 )| 1 -> 0


X xor Y = [X and (not) Y] or [(not) X and Y]
위의 연산이 xor과 동일하다고 하네요. 어렵네 ㅠ



Shift operations.
Shift operations move the bits in a pattern, changing the positions of the bits.
간단하네요. 단순히 비트패턴을 한쪽으로 이동시키는 연산을 말합니다.
단, signed number에 대해서는 사용하지 않습니다. 부호의 의미가 없어져버리기 때문.. 일듯하네요

< Logical shift operation >

ex) Left shift :: [ 10011000 -> 00110000 ]
없던자리는 0으로 채워버립니다.
Left shift : multyply an integer by two
right shift : divide an interger by two

물론, overflow가 발생하는 경우, 수의 손실은 막을 수 없습니다.

< Arithmetic shift operation >
ex) Left shift :: [ 10011000 -> 00110001 ]
shift로 인해 잃어버린 비트는, 새로 들어오는 자리에 위치하도록 합니다.
Left shift : multyply an integer by two
right shift : divide an interger by two
이경우는 수의 손실이 없습니다. 반대방향의 shift 연산을 통해, 원래의 수를 복원할 수 있습니다.



shift 연산 이후에는, 캐리에 대해서 설명이 조금 나오구.. 
뺄셈 연산에 대해서 2의 보수를 취한다는거 조금 나오네요

5.75 + (-7.0234375) 를 floating-point 로 계산해보고 있네요..

5.75 = 101.11 입니다. 이를 floating point로 나타내면
(3자릿수이기 때문에, Exponent는 excess_127 + 3)
              Sign     Exponent       Mantissa
5. 75 =     0          0111 1111       00000 000000--
                       +           11    + 10111 000000--
       =     0          1000 0010      10111 000000--


-7.0234375 도 나름의 노동을 이용하여 -_-; 계산하면

             1           1000 0010       1110 0000110000---


부왘.. 어렵네요
이 둘을 적절하게 계산하면
S       E       Denormalized M
1   1000 0010     0010100011000000000--

S       E          M
1  0111 1111    010001100000000000000000--