source

부호 있는 문자와 부호 없는 문자의 차이

goodcode 2022. 8. 18. 23:29
반응형

부호 있는 문자와 부호 없는 문자의 차이

그래서 나는 그 차이점을 알고 있습니다.signed int그리고.unsigned int숫자가 양수인지 음수인지를 나타내기 위해 비트가 사용된다는 것이다, 그러나 이것은 어떻게 양수인지char어떻게 캐릭터가 긍정적일 수 있고 부정적일 수 있나요?

C 언어에는 전용 문자 유형이 없습니다. char(그 점에 있어서) 와 같은 정수형입니다.int,short및 기타 정수형. char가장 작은 정수형일 뿐입니다.따라서 다른 정수형과 마찬가지로 부호화 또는 부호화되지 않을 수 있습니다.

(이름에서 알 수 있듯이)은 사실이다char는 주로 문자를 나타내기 위해 사용됩니다.그러나 C의 문자는 정수 "코드"로 표현되기 때문에 정수형이 이상할 것은 없습니다.char그 목적을 위해 사용됩니다.

의 유일한 일반적인 차이점은char그 외의 정수 타입은, 이 플레인입니다.char와 동의어가 아니다.signed char다른 정수를 사용하면signedmodifier는 옵션 또는 옵션입니다.

저는 위의 내용에 약간 동의하지 않습니다.unsigned char단순한 의미는 다음과 같습니다.산술 연산을 수행할 때는 +/- 부호의 비트 플래그 대신 최상위 비트를 사용하십시오.

이 기능을 사용하면 의미가 있습니다.char예를 들어 다음과 같은 수치입니다.

typedef char BYTE1;
typedef unsigned char BYTE2;

BYTE1 a;
BYTE2 b;

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

사용하시는 경우char프로그램으로부터 코멘트가 삭제되는 것과 같이, 「지정 해제」는 컴파일러에 의해서 완전하게 무시됩니다.

(일반)의 3가지 문자 타입이 있습니다.char,signed char그리고.unsigned char. any chars는 보통 8비트 정수* 입니다.그런 의미에서 a는signed그리고.unsigned char유용한 의미(대우에 상당하는 의미)를 가지다uint8_t그리고.int8_t텍스트의 의미로 문자로 사용할 경우,char(일반 문자라고도 합니다).이거는 보통signed char어느 쪽이든 컴파일러에 의해 구현될 수 있습니다.

* 엄밀히 말하면, 글자 크기는 다음과 같습니다.sizeof(char)는 1이지만 보통 8비트 정수입니다.

표현은 같고 의미는 다릅니다.예를 들어 0xFF는 둘 다 "FF"로 표시됩니다."char"로 처리되면 음수 -1이지만 부호 없음으로 255입니다.비트 시프트는 부호 비트가 시프트되지 않기 때문에 큰 차이가 있습니다.예를 들어 255비트를 오른쪽으로 1비트를 시프트하면 127이 되고 "-1"을 오른쪽으로 시프트해도 효과가 없습니다.

A signed char는 부호 있는 값으로, 일반적으로는 a보다 작으며, 이 값은 a보다 크지 않음을 보증합니다.short. ANunsigned char는 부호 없는 값이며, 일반적으로는 a보다 작으며, 이 값보다 크지는 않음을 보증합니다.shortA형char없이signed또는unsigned한정자는 서명된 경우와 서명되지 않은 경우 중 하나로 동작할 수 있습니다.char이것은 보통 구현 정의이지만, 그렇지 않은 경우가 몇 가지 있습니다.

  1. 대상 플랫폼의 문자 집합에서 표준 C에서 필요한 문자 중 하나가 최대 부호 문자보다 높은 코드에 매핑될 경우 "char"는 서명되지 않아야 합니다.
  2. char와 short의 사이즈가 같으면 char에 서명해야 합니다.

"C"의 두 가지 사투리가 있는 이유 중 일부는char서명되어 있고 서명되어 있지 않은 것)은 다음과 같은 몇 가지 구현이 있다는 것입니다.char 서명되지 않은 상태여야 하며, 서명해야 하는 다른 위치여야 합니다.

예를 들어 8비트 문자가 있는 경우 7비트를 매그니튜드에, 1비트를 기호에 사용할 수 있습니다.따라서 부호 없는 문자의 범위는 0 ~255이고 부호 있는 문자의 범위는 -128 ~127입니다(예를 들어).

그 이유는char는 모든 효과를 8비트 수치로 저장합니다.부정적이거나 긍정적인 것에 대해 말하는 것charASCII 코드(서명*만 가능)라고 생각하면 의미가 없지만, 그것을 사용하면 의미가 있습니다.char0 ~ 255 또는 -128 범위의 숫자를 저장합니다.127은 2차원 표현에 따른 것입니다.

*: 서명 없이 사용할 수도 있습니다.실제로 구현에 따라 다르다고 생각합니다.이 경우 사용하는 인코딩에 의해 제공되는 확장 ASCII 문자셋에 액세스할 수 있습니다.

같은 방법으로.int긍정적일 수도 있고 부정적일 수도 있습니다.차이가 없다.실제로 많은 플랫폼에서 부적격char서명되어 있습니다.

언급URL : https://stackoverflow.com/questions/4337217/difference-between-signed-unsigned-char

반응형