C에서 9비트 확장 서명

Muhammad Zeeshan 2023년10월12일
  1. 부호 확장이란 무엇입니까?
  2. C에서 9비트 정수 부호 확장
C에서 9비트 확장 서명

이 튜토리얼에서는 C에서 9비트 정수를 부호 확장하는 방법을 배웁니다. 먼저, 부호 확장이 정확히 무엇인지 알아야 합니다.

부호 확장이란 무엇입니까?

부호 확장은 예를 들어 32비트에서 64비트로 이동하여 부호 비트를 유지하면서 숫자를 확장하는 것을 말합니다. 부호 비트는 오늘날 사용되는 숫자 형식에서 항상 가장 높습니다.

이것은 단지 전통의 문제이지만 우리가 아는 한 항상 그렇습니다. 이것은 숫자의 다른 부분의 무결성을 유지하면서 가장 중요한 숫자의 부분을 새로운 가장 높은 위치로 이동해야 함을 나타냅니다.

C에서 9비트 정수 부호 확장

C 프로그래밍 언어의 일부 비트 연산자는 하드웨어 수준에서 작동합니다. 그러나 이러한 연산자를 활용하려면 메모리의 아키텍처와 C가 메모리에 데이터를 저장하는 방법을 이해해야 합니다.

구조:

  1. 메모리는 char 유형의 각 문자에 대해 1바이트로 나뉩니다.
  2. int 유형의 메모리 구조는 4바이트로 구성됩니다.
  3. short 유형의 메모리 위치는 2바이트로 구성됩니다.

표지판에 대한 정보는 가장 왼쪽에 있는 부분에서 찾을 수 있습니다. 숫자 1은 음수를 나타내고 숫자 0은 양수를 나타냅니다.

논의 중인 내용을 더 잘 이해하기 위해 다음 예를 살펴보겠습니다.

시작하려면 main() 클래스에서 short 유형의 변수를 만들고 이름을 val로 지정합니다. 그런 다음 아래와 같은 방식으로 변수를 할당합니다.

short val = 234;

그런 다음 res라는 변수에 9비트 숫자와 함께 만든 short 값을 제공합니다.

int res = val & 0b0000000111111111;

if 검사가 적용됩니다. 이것은 (0x100)을 유지하고 있는 가장 높은 비트인 부호 비트가 설정되어 있는지 확인하고 설정되어 있으면 그 뒤에 오는 모든 비트를 넣습니다.

if (val & 0x100) {
  res = res | 0xFE00;
}

설명:

메모리에 16비트가 있는 작은 정수인 val 변수를 만들었습니다. & 연산자는 가장 최근의 9비트를 마스킹하는 데 사용되었습니다.

비트 연산에 사용되는 AND 연산자이며 그 과정은 다음과 같습니다.

X   Y   res
0   0   0
0   1   0
1   0   0
1   1   1
  1. res는 결과를 나타내고 XY는 많은 입력 옵션을 나타냅니다. 계산은 비트 단위로 수행됩니다.

    동일한 유효 값을 가진 두 비트가 모두 1인 경우에만 1을 생성합니다.

  2. 따라서 비트 단위 AND 연산자의 값의 마지막 9비트를 분리할 수 있으며 나머지 비트는 0으로 설정됩니다. 0b0000000111111111 값은 이진 표현에 해당합니다.

    이것은 가장 최근의 9비트에만 1이 포함되어 있고 나머지에는 0이 포함되어 있음을 보여줍니다. res 변수는 결과로 업데이트됩니다.

  3. 그 후 if 검사를 사용하여 첫 번째 비트를 확인했습니다. 1이면 결과에 추가했습니다. 그렇지 않으면 0으로 두었습니다.

이를 위해 다시 비트 단위 AND 연산자를 사용했으며 이번에는 첫 번째 비트만 추출하고 답이 1이면 |를 사용했습니다. 비트 단위 OR 연산자이며 다음과 같이 작동합니다.

X   Y   res
0   0   0
0   1   1
1   0   1
1   1   1
  1. res는 출력이고 XY는 입력 가능성입니다. 비트 단위로 계산됩니다.

    동일한 유효 비트가 모두 0인 경우에만 0을 출력합니다. if 문에서 이 연산자의 결과가 평가됩니다.

    true인 경우 비트 OR 연산자를 사용하여 결과의 ​​맨 왼쪽 비트에 1을 삽입합니다.

  2. 0xFE00은 이진수의 16진수 표현이며 부호 비트가 있는 경우 그 위의 비트를 설정하는 데 사용됩니다.

C에서 비트 연산자를 사용하여 다른 다양한 작업을 수행할 수 있습니다. C에는 비트 AND와 비트 OR보다 더 많은 비트 연산자가 있습니다.

^ 기호로 표시되는 비트 단위 XOR이 있습니다. ~ 기호는 비트 단위 NOT 연산자를 나타냅니다.

>> 기호는 왼쪽 시프트 연산자를 나타냅니다. << 기호를 사용하여 오른쪽 시프트를 수행할 수 있습니다.

이 운영자의 도움을 받아 다양한 방법으로 이 작업이나 원하는 다른 작업을 수행할 수 있습니다.

완전한 소스 코드:

#include <stdio.h>

int main() {
  short val = 234;
  int res = val & 0b0000000111111111;
  if (val & 0x100) {
    res = res | 0xFE00;
  }
  return 0;
}
Muhammad Zeeshan avatar Muhammad Zeeshan avatar

I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.

LinkedIn

관련 문장 - C Bit