C/C++에서 부호 없는 문자
는 어떤 용도로 사용되나요? 일반 '문자'와 어떻게 다른가요?
C++에서, 서로 다른 세 가지 문자 유형:
챨 '-' 서명됨 챨 '-' 부호 없는 챨 '-'
, 텍스트 '를 사용하여 문자 유형을 사용하는 경우 부적격 챨':
또한 값을 번호로 작동됨 아웃해야 있지는 않지만, 이 값은 부호 또는 서명됩니다 표시할지를 미지정을 취급됩니다. 비록 ASCII 문자 비교를 통해 두려워 경우 정부는 교도관님도요 제한값 you& 단순한 금고에도요 # 39, re (0-127)
, 번호를 사용하는 경우 문자 형식으로 사용:
'-' , - 127 챨 서명됩니다 확보할 수 있으므로 적어도 127 수 있는 범위. (127) 로 흔히 128)
c++ 표준 전용 보기입니다 ", At least" 있기 때문에, 각 숫자 유형은 대응에 필요한 최소 값의 범위. 스이제로프 (챨) '가 되어야 하는 1' (즉, 1 바이트) 이지만 바이트입니다 이론적으로 예를 들어 32 비트 수 있다. '-' '는 여전히 스이제로프 될 수 있다고 할 수 있는 크기로 보고하십시오 1' 마무리라뇨 기능을 스이제로프 (챨) = 스이제로프 (느린) =' 1 '.
C 표준은 char
의 서명 여부를 정의하지 않으므로 이는 구현에 따라 다릅니다. 플랫폼에 따라 char는 서명된
또는 서명되지 않은
일 수 있으므로 구현이 이에 의존하는 경우 서명된 문자
또는 서명되지 않은 문자
를 명시적으로 요청해야 합니다. 문자열에서 문자를 표현하려는 경우 char
를 사용하면 플랫폼에서 문자열에 넣는 것과 일치합니다.
부호 없는 문자와
부호 있는 문자의 차이점은 예상한 대로입니다. 대부분의 플랫폼에서
부호 없는 문자는
-128에서
127범위의 8비트 2진수이고,
부호 없는 문자는 8비트 부호 없는 정수(
0에서
255)입니다. 표준에서는
char유형이 8비트를 가질 것을 요구하지 않으며,
sizeof(char)가
1을 반환해야 한다는 점에 유의하세요. char의 비트 수는
limits.h의
CHAR_BIT로 확인할 수 있습니다. 하지만 오늘날
8`이 아닌 다른 값을 반환하는 플랫폼은 거의 없습니다.
이 문제에 대한 좋은 요약이 있습니다 여기.
제가 이 글을 올린 이후 다른 사람들이 언급했듯이, 작은 정수를 표현하려면 int8_t
와 uint8_t
를 사용하는 것이 더 좋습니다.
이젠 누군가와 토론했다 의심하였더라 일이 발생합니까 변환하십시오 때 '를' 가치 '-' unsigned int 유형의 챨. 그는 이를 '결과' 에 있다는 생각에 모든 비트를 1 로 설정되었습니다 서명되지 않은 챨 있었기 때문에 걱정이 예증으로 표현. 그러나 그는 don& # 39, 수 없다. # 39 의 바로 뒤에 있는 변환 높여줍니까 아웃해야 it& 이 규칙을 어떤 고안되었습니다:
>. 새 유형이 의해 서명되지 않은 경우, 추가 또는 값이 반복적으로 변환되었습니다 하나를 빼서 보다 최대값인 표현할 수 있는 새로운 유형 이 값은 때까지 새로운 범위의 유형:. ('6.3.1.3p2' 구배면에 C99 에서)
unsigned char c = (unsigned char)-1;
또한 그 변환은 다음과 같이 높은 것은 그냥 잘라내는 비트임을 주문하십시오 , # 39 의 보수 행사를 two& 노력한 것은 있을 수 있지만, 같은 단순한 절단, 반드시 다른 예중이 isn& t # 39 로 표현.
예를 들어 어법을 같이 unsigned char :
End up with RGB 적색을 (255.0,0) - > 얻으실 수 있습니다. (0 %0 %100% 빨강, 녹색, 파랑).
[1]: https://isocpp.org/wiki/faq/intrinsic-types # 당 비트 바이트
부호 없는 문자의 범위는 -128~127이고
부호 없는 문자`의 범위는 0~255입니다.
char`는 컴파일러에 따라 부호 있는 문자 또는 부호 없는 문자와 동일하지만 별개의 유형입니다.
C 스타일 문자열을 사용하는 경우 char
를 사용하면 됩니다. 산술에 문자를 사용해야 하는 경우(매우 드물지만) 이식성을 위해 서명 또는 부호 없는 문자를 명시적으로 지정하세요.
직접판매용 값을 측면에서 일반 챨 CHAR_MIN 사이의 값을 때 사용되는 것으로 알려져 있는 '에서' 긍정적 '와' 는 서명되지 않은 상태에서 CHAR_MAX 챨 연산뿐 maxvalorarray 끝. 예를 들어, ',' 일반 '8' 은 CHAR_BIT maxvalorarray 챨 보장받을 수 밖에 [0, 127] (될 수 있어 서명됨 또는 부호 없는) '와' unsigned '을 동시에 챨 서명됨 챨' 을 [0, 255] [- 127, 127].
어떤 면에서, 이 표준은 객체에는 it& # 39 에 사용되는 POD (plain old data) 를 직접 스크램블된 변환되었습니다 서명되지 않은 배열입니다 챨. 이 표현 및 비트 패턴을 객체에는 검사할 수 있습니다. 말장난 같은 안전 보장을 위해 존재하며, t # 39 doesn& 유형 또는 서명됩니다 챨 챨.
일반 챨 서명되지 않은 챨 soundmixer. 비트가 예약됩니다 예증으로 다른 번호로 있다. 반대로 이 변경사항과 maxvalorarray [- 128 ~ 127] 를 [0 ~ 255].
부호 없는 자, 한 때 일반적으로 사용되는 don& # 39 징조예요 된 것입니다. 이 같은 업무를 수행할 때 발쿰치로 차이 등이 비트 (shift+ctrl 연장시킵니다 예증으로) 및 기타 사항을 다룰 때 챨 비호환성의 바이트입니다 정보기술 (it) 을 사용하지 않고 숫자입니다.
프롬 " 말을 인용, c 프로그래밍 laugage". book:
'또는' unsigned '또는' 서명됩니다 한정자는 정수 챨 적용될 수 있다. 부호 없는 번호 이 법이 항상 양수입니다 또는 제로, 나머지 2 ^ n (n 은 숫자 및 위선지들을 산술 비트 입력. 자 그럼, 예를 들어, 8 비트, unsigned char 변수에 값을 가지고 있다. 반면 서명됨 자 사이에 값이 입력되었는지 0-사이의 255w - 128, 127 명이 (받을시간은 two& # 39. s 보완할 시스템) 자, 또는 시스템 종속 unsigned 는 일반 서명됩니다 표시할지를 있다. 그러나 인쇄가능 문자는 항상 양수입니다.