IT박스

부호있는 / 부호없는 char의 차이점

itboxs 2020. 7. 2. 08:04
반응형

부호있는 / 부호없는 char의 차이점


부호있는 정수와 부호없는 정수의 차이점은 숫자가 양수인지 음수인지를 나타내는 데 비트가 사용된다는 것입니다. 그러나 이것이 문자에 어떻게 적용됩니까? 캐릭터는 어떻게 긍정적이거나 부정적 일 수 있습니까?


C 언어에는 전용 "문자 유형"이 없습니다. char이 AS (즉 관련하여) 동일한 정수 타입이며 int, short다른 정수 유형. char가장 작은 정수 유형입니다. 따라서 다른 정수 유형과 마찬가지로 부호가 있거나 부호가 없습니다.

이름에서 알 수 있듯이 char대부분 문자를 나타내는 데 사용되는 것이 사실입니다 . 그러나 C의 문자는 정수 "코드"로 표시되므로 정수 유형 char이 해당 용도로 사용 된다는 사실에는 특별한 것이 없습니다 .

char정수 유형과 다른 정수 유형 의 유일한 차이점은 일반 char은 일반적으로와 동의어가 아니며 signed char다른 정수 유형의 경우 signed수정자는 선택적 / 암시 적입니다.


위의 내용에 약간 동의하지 않습니다. 서명 숯불는 대신 산술 연산을 수행 할 때를위한 +/- 기호 비트 플래그로 치료의 가장 중요한 비트를 사용하여 간단하게 의미한다.

예를 들어 char 을 숫자로 사용하면 의미가 있습니다 .

typedef char BYTE1;
typedef unsigned char BYTE2;

BYTE1 a;
BYTE2 b;

변수 a 의 경우 7 비트 만 사용할 수 있으며 범위는 (-127 ~ 127) = (+/-) 2 ^ 7 -1입니다. 변수 b의 경우 8 비트를 모두 사용할 수 있으며 범위는 0 ~ 255 (2 ^ 8 -1)입니다.

char 를 문자로 사용하면 프로그램에서 주석이 제거되는 것처럼 컴파일러에서 "부호없는"을 완전히 무시합니다.


이 세 가지 문자의 종류 (일반)을 char, signed char그리고 unsigned char. * CHAR 상관은 일반적으로 8 비트의 정수이고, 그런 의미에서, signed그리고 unsigned char유용한 의미 (일반적으로 등가가 uint8_tint8_t). 텍스트 의미에서 문자로 사용될 때는 char(일반 문자라고도 함)를 사용하십시오. 이것은 일반적 signed char이지만 컴파일러에 의해 구현 될 수 있습니다.

* 기술적으로 char sizeof(char)은 1이면 아무 크기 나 될 수 있지만 일반적으로 8 비트 정수입니다.


표현은 동일하지만 의미가 다릅니다. 예를 들어 0xFF는 모두 "FF"로 표시됩니다. "char"로 취급되면 음수 -1입니다. 그러나 부호없는 255입니다. 비트 시프 팅과 관련해서는 부호 비트가 시프 팅되지 않기 때문에 큰 차이가 있습니다. 예를 들어, 255를 1 비트 오른쪽으로 이동하면 127이됩니다. "-1"을 오른쪽으로 이동해도 효과가 없습니다.


'signed char'는 일반적으로 'short'보다 작고 크지 않도록 보장되는 signed 값입니다. '부호없는 문자'는 일반적으로 '짧은'보다 작고 크지 않은 부호없는 값입니다. 부호있는 또는 부호없는 규정자가없는 'char'유형은 부호있는 문자 또는 부호없는 문자로 작동 할 수 있습니다. 이것은 일반적으로 구현에 따라 정의되지만 그렇지 않은 경우가 몇 가지 있습니다.

  1. 대상 플랫폼의 문자 세트에서 표준 C에 필요한 문자가 최대 부호있는 문자보다 높은 코드에 맵핑되는 경우 'char'는 부호가 없어야합니다.
  2. 'char'와 'short'의 크기가 같은 경우 'char'에 서명해야합니다.

그 이유의 일부는 "C"의 두 가지 방언이 있습니다 ( '문자'가 체결되는 경우들, 그리고 서명되지 않은 곳들은) 어떤 '숯불'구현 있다는 것입니다 해야한다 이 서명, 그리고 다른 사람 합니다 서명이.


이것은 char모든 효과에 8 비트 숫자로 저장 되기 때문 입니다. 음수 또는 양수에 대해 말하는 char것은 ASCII 코드 (방금 서명 할 수 있음 *)로 간주하면 의미가 없지만 char0-255 또는 -128 범위의 숫자를 저장하는 데 사용하면 의미가 있습니다. ..127 2 보완 표현에 따라.

* : 그것은 부호가 없을 수도 있습니다. 실제로 내가 생각한 구현에 달려 있습니다.이 경우 사용 된 인코딩으로 제공되는 확장 ASCII 문자 세트에 액세스 할 수 있습니다


같은 방법 int으로 긍정적이거나 부정적 수 있습니다. 다른 점이 없다. 실제로 많은 플랫폼에서 규정되지 않은 char서명이 있습니다.


같은 방식으로, 예를 들어 8 비트 문자를 사용하는 경우 크기에 7 비트를 사용하고 부호에 1을 사용할 수 있습니다. 따라서 서명되지 않은 문자 범위는 0에서 255 사이이며 서명 된 문자 범위는 -128에서 127 사이입니다 (예 :).

참고 URL : https://stackoverflow.com/questions/4337217/difference-between-signed-unsigned-char

반응형