작성자 없음
작성자 정보가 삭제된 글입니다.
작성
·
640
0
#include<stdio.h>
int main(void)
{
printf("AND:%8X\n",0x9&0xA);
printf("OR : %8X\n", 0x9 | 0xA);
printf(:XOR : %08X\n", 0x9 ^ 0xA);
printf("NOT : &08X\n", -0x9):
}
출력값이
AND : 00000008
OR : 0000000B
XOR : 00000003
NOT : FFFFFF6
로 나오는데, 이유를 알 수 있을까요 ? 비트연산자 논리연산이 이해가 안가네요 ㅠㅠ
답변 1
0
두 가지에 대한 이해가 필요할 것 같습니다.
1️⃣ 첫 번째로 16진수!
비트는 이진수이죠. 0과 1의 값을 가지니까요. 반면 16진수는 0부터 15 (10~15는 ABCDEF 라고 표현하죠) 의 값을 가집니다.
따라서 16진수 한 자리로 이진수 4 자리를 표현할 수 있는거에요!
예를 들어 11은 10진수로 11 / 16진수로 B / 2진수로 1011 입니다. 즉, B 라는 16진수 하나가 1011 4자리의 비트를 표현할 수 있다고 이해하시면 됩니다.
따라서 0000000B 이 8 자리의 16진수 값은 비트로 표현하면 0000 0000 0000 0000 0000 0000 0000 1011 이런 32자리의 비트와도 같습니다.
2️⃣ 비트 연산에 대한 이해
강의에서 비트 연산자에 대해서 배우셨을 겁니다. 즉, 두 비트끼리 연산을 하는거에요!
AND, OR 등등 비트 연산자들에 대해선 강의에서 들으셨으리라 생각하고 설명을 생략하겠습니다.
0x9 | 0xA 의 결과가 0000000B 가 되는 이유는
16진수인 0x9 는(앞에 00000 은 생략되고 9 만 나타낸 것입니다.) 32자리 비트로 표현하면 0000 0000 0000 0000 0000 0000 0000 1001 이 됩니다.
16진수인 0xA 를 32자리 비트로 표현하면 0000 0000 0000 0000 0000 0000 0000 1010 이 됩니다.
0x9 : 0000 0000 0000 0000 0000 0000 0000 1001
0xA : 0000 0000 0000 0000 0000 0000 0000 1010
이렇게 32자리 비트가 각각 있는데요. 자리가 같은 하나의 비트끼리!! 비트 연산을 각각 진행하시면 됩니다.
1011 과 1010 의 OR 연산은 1011 이 되죠? 앞에 많은 00000... 끼리는 어차피 OR 연산해도 0 일것이구요.
따라서 0x9 | 0xA 의 답은 0000 0000 0000 0000 0000 0000 0000 1011 입니다. 이는 16진수로 표현하면 0x0000000B 입니다
나머지도 이런식으로 이해해보시면 됩니다~!