short 형이 일반적인 데이터형으로 바뀌는 경우를 예로 들 수 있다.
short형이 int형으로 바뀐다고 가정 할 때, 여기서 이러한 연산들이 발생한다.
1) 부호비트를 확인한다.
2) int형 만큼의 저장소를 잡는다.
3) 형 변환을 통해서 새롭게 가지게된 저장소에 부호비트를 채워넣는다.
ex) 11000000 11111111 = 11111111 11111111 11000000 11111111
cf) unsigned는 0을 채움, signed는 부호비트 확인
이 경우는 확장에 반대이다. int형이 short가 되는 것을 예로 할 수 있다.
다음과 같이 연산한다.
1) short형의 제일 큰 비트 자릿수보다 1만큼 큰 자리수의 값을 기억한다.
2) int형을 위에서 얻은 자리수의 값으로 나머지 연산을 해준다.
S2 | S1 | 출력 | 연산 |
---|---|---|---|
0 | 0 | F=A&B | AND |
0 | 1 | F=A|B | OR |
1 | 0 | F=A XOR B | XOR |
1 | 1 | F=!A | NOT |
이렇게 총 네가지의 연산을 하는 4x1MUX를 가지고 있다.
ex)4-비트 논리 연산장치 위의 MUX가 네개가 연결됨
내가 원하는 부분에 보수가 일어나게끔 해주는 연산
방법
1) 보수가 되길 원하는 부분을 1로 한다.
2) A와 B를 XOR 연산을 해준다.
내가 원하는 부분을 hidden 하기 위한 연산
방법
1) 내가 0으로 바꾸고 싶은 자리수는 0, 그대로 하고 싶은 부분은 1로 한다.
2) 그리고 A와 B를 AND연산한다.
특정한 부분에 내가 원하는 값을 넣고 싶을 때 하는 연산이다.
ex) 11001111 -> 01011111 이라하면 앞에 네자리수가 임의대로 바뀌었다.
방법
1) 일단 내가 바꾸기를 희망하는 자리수를 0으로 초기화 해준다.
2) 초기화를 해주기 위해서는 mask 연산을 한다. 원하는 부분 0 하기 싫은 부분 1 AND연산
3) 그리고 초기화를 해준 부분에 대해서 내가 원하는 값을 세트해주기 위해 선택적 세트 연산을 한다.
4) 세트하고자 하는 부분에는 1 아닌 부분에는 0을 넣고 OR 연산을 한다.
A와 B가 같은지 아닌지 확인하는 연산이다.
방법
1) A와 B를 XOR 연산을 해준다.
2) 그러면 A의 값이 B와 같은 부분은 0, 아닌부분은 1로 바뀌게 된다.
int main(){
int x,y,z
x=20;
y=15;
z=x|y;
printf("%08X %08X %08X",x,y,z);
}
결과 : 00000014 0000000F 0000001F
10100
01111
11111