이 비트 와이즈 AND 연산자는 어떻게 숫자의 하위 7개 차수 비트를 마스킹합니까?
브라이언 커니건과 데니스 리치의 C 프로그래밍 언어를 읽고 있습니다.비트와이즈 AND 연산자에 대한 설명은 다음과 같습니다.
비트 와이즈 AND 연산자
&
일부 비트 집합을 마스킹하는 데 자주 사용됩니다. 예를 들어,n = n & 0177
하위 7비트를 제외한 모든 값을 0으로 설정합니다.
n
.
저는 그것이 어떻게 하위 7개의 주문 비트를 가르고 있는지 잘 모르겠습니다.n
. 누가 좀 설명해 주시겠습니까?
갯수0177
는 아래의 이진 패턴을 나타내는 8진수입니다.
0000000001111111
당신이AND
비트 와이즈 연산을 사용하여&
, 결과는 원본의 비트를 다음으로 설정된 비트에서만 유지합니다.1
"마스크"에서, 다른 모든 비트는 0이 됩니다.AND는 다음과 같은 규칙을 따르기 때문입니다.
X & 0 -> 0 for any value of X
X & 1 -> X for any value of X
예를 들어, 만약 당신이AND
0177
그리고.0545454
, 당신은
0000000001111111 -- 0000177
0101010101010101 -- 0545454
---------------- -------
0000000001010101 -- 0000154
In C에 다음과 같은 정수 리터럴 접두사를 붙입니다.0
8진수 입니다.0177
는 8진수입니다.
각 팔진수(값의)0
로.7
)는 3비트로 표현되며,7
는 각 숫자에 대해 가장 큰 값입니다.그래서 가치는.7
팔분의 일로3
비트 세트
부터0177
는 팔분의 문자이고 각각의 팔분은3
3비트, 다음과 같은 이진 동치를 갖습니다.
7 = 111
1 = 001
그 말은0177
가001111111
이진법으로
ANSIC에서 숫자의 8진수 표현에 사용되는 첫 번째 '0'은 이미 설명되어 있습니다.실제로 숫자 0177(옥탈)은 128-1인 127(십진수)과 같고 다음과 같이 나타낼 수도 있습니다.2^7-1
,그리고.2^n-1
이진법으로 표현하면 1을 취하고 모든 1을 오른쪽에 놓는 것을 의미합니다.
0177 = 127 = 128-1
그것은 약간의 마스크입니다.
0000000000000000000000001111111
아래에서 코드를 확인하실 수 있습니다.
데모
#include <stdio.h>
int main()
{
int n = 0177; // octal representation of 127
printf("Decimal:[%d] : Octal:[%o]\n", n, n, n);
n = 127; // decimal representation of 127
printf("Decimal:[%d] : Octal:[%o]\n", n, n, n);
return 0;
}
산출량
Decimal:[127] : Octal:[177]
Decimal:[127] : Octal:[177]
0177은 각 숫자가 000에서 111까지의 값에서 3비트로 표현되는 8진수 값이므로 0177은 0011111(즉, 001|111|111)로 해석됩니다. 만약 32비트 이진법(MSB에 따라 나머지 숫자가 채워지는 것을 제외하면 64비트도 가능합니다. 이 경우 값 0의 부호 비트) 형태는 00000000000000000000000011111이고 다음과 같이 수행됩니다.지정된 숫자에 대해 이 값을 사용하면 n비트 숫자의 나머지 숫자를 0으로 돌리는 숫자의 하위 7비트가 출력됩니다.
(since x&0 =0 & x&1=x e.g 0&0=0 ,1&0=0, 1&1=1 0&1=1)
언급URL : https://stackoverflow.com/questions/18152043/how-is-this-bitwise-and-operator-masking-the-lower-seven-order-bits-of-the-numbe
'programing' 카테고리의 다른 글
WordPress i18n 프로젝트에서 변수로 내부 링크를 트리거하여 접두사를 추가합니다. (0) | 2023.10.10 |
---|---|
모든 Excel 시트를 C#의 DataSet으로 가져오는 방법 (0) | 2023.10.10 |
setuid root C 프로그램에서 스크립트 호출 - 스크립트가 root으로 실행되지 않음 (0) | 2023.10.05 |
mysql 데이터베이스에 몇 개의 테이블을 만들 수 있습니까? (0) | 2023.10.05 |
Python에서 빠른 푸리에 변환 플롯팅 (0) | 2023.10.05 |