비트연산자질문입니다
697
작성자 없음
작성한 질문수 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 입니다
나머지도 이런식으로 이해해보시면 됩니다~!
Export template 안됨
1
62
2
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
88
3
main 함수에서 왜 int만 선언이 되는걸까요
1
78
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
74
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
77
1
프로토타입과 함수간의 인자 불일치
1
86
2
12.12 헤더 관련 질문
1
74
2
Visual Studio Community 2026 사용 문의
1
167
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
71
2
getchar(), putchar()
1
110
3
강의자리ㅛ
1
92
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
127
2
소스파일안에 여러 파일
1
87
2
F5와 F7의 차이
1
90
2
c = TWO * (a+b); 에서 a와 b는?
1
67
2
; 세미콜론을 붙이는 기준에 문의
1
78
1
Step over 기능 문의
1
64
2
2.6 강의 따옴표 출력 규칙 문의
1
87
2
int main 함수 관련 오류 문의
1
76
2
13.4 words[0]
0
73
2
11.7 함수를 구현해 봤습니다.
1
67
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
71
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
60
2
11.6 fit_str함수를 구현해 봤습니다.
1
58
2





