programing

이 비트 와이즈 AND 연산자는 어떻게 숫자의 하위 7개 차수 비트를 마스킹합니까?

topblog 2023. 10. 10. 20:01
반응형

이 비트 와이즈 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에 다음과 같은 정수 리터럴 접두사를 붙입니다.08진수 입니다.0177는 8진수입니다.

각 팔진수(값의)0로.7)는 3비트로 표현되며,7는 각 숫자에 대해 가장 큰 값입니다.그래서 가치는.7팔분의 일로3비트 세트

부터0177는 팔분의 문자이고 각각의 팔분은33비트, 다음과 같은 이진 동치를 갖습니다.

7  = 111
1  = 001

그 말은0177001111111이진법으로

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

반응형