sourcetip

어떻게 하면 낮은 8비트의 int를 얻을 수 있습니까?

fileupload 2023. 9. 20. 20:39
반응형

어떻게 하면 낮은 8비트의 int를 얻을 수 있습니까?

제가 n = 8의 int 변수를 가지고 있다고 가정해 보겠습니다. 대부분의 시스템에서 이 값은 32비트 값이 됩니다.이것의 하위 8비트(최저 바이트)만 이진법으로 얻을 수 있는 방법은 무엇입니까?또한 각 비트에 액세스하여 해당 비트가 무엇인지 알 수 있는 방법이 있습니까?

unsigned n = 8;
unsigned low8bits = n & 0xFF;

몇 가지 사항을 참고합니다.

  1. 비트 와이즈 연산의 경우 항상unsigned종류들
  2. 비트는 이진 마스킹을 사용하여 숫자에서 추출할 수 있습니다.&교환입니다.
  3. 로우 8비트에 액세스하려면 마스크가0xFF왜냐하면 이진법에서는 낮은 8비트가 켜지고 나머지 0비트가 켜지기 때문입니다.
  4. 숫자 8의 하위 8비트는...8 (잠시 생각해 보세요)

숫자의 특정 부분에 접근하려면 다음과 같이 말합니다.kth 비트:

unsigned n = ...;
unsigned kthbit = (1 << k) & n;

지금이다,kthbit만약에 0 이라면 0이 될 것입니다.k한 뼘n0이고, 약간의 양수(2**k) 만약에k한 뼘n1 입니다.

비트 와이즈 산술을 사용하여 가장 낮은 8비트를 마스킹합니다.

unsigned char c = (x & 0xFF);

n번째로 낮은 비트에 접근하려면, 방정식은(x & (1 << n))(0의 n은 최하위 비트를 나타냅니다.)0의 결과는 비트가 선명함을 나타내고 0이 아닌 경우는 비트가 설정되었음을 나타냅니다.

가장 좋은 방법은 비트 논리 연산자와 적절한 값을 사용하는 것입니다.

따라서 하위 8비트의 경우:

n & 0xFF; /* 0xFF == all the lower 8 bits set */

또는 일반적으로:

n & ((1<<8)-1) /* generate 0x100 then subtract 1, thus 0xFF */

비트 시프트 연산자와 결합하여 특정 비트를 얻을 수 있습니다.

(n & (1<<3))>>3; 
  /* will give the value of the 3rd bit - note the >>3 is just to make the value either 0, or 1, not 0 or non-0 */

특정 비트가 숫자로 설정되어 있는지 테스트할 수 있습니다. << 및 &, 즉:

if (num & (1<<3)) ...

네 번째 비트가 설정되어 있는지 여부를 테스트합니다.

마찬가지로 가장 낮은 8비트만 설정된 숫자를 사용하여 (정수로서) 가장 낮은 8비트만을 추출할 수 있습니다.num & 255아니면num & 0xFF(16진수로 표시)

언급URL : https://stackoverflow.com/questions/3270307/how-do-i-get-the-lower-8-bits-of-an-int

반응형