programing

부호 없는 문자를 C로 인쇄하려면 어떻게 해야 합니까?

goodcopy 2022. 8. 3. 21:48
반응형

부호 없는 문자를 C로 인쇄하려면 어떻게 해야 합니까?

char를 양의 값으로 인쇄하려고 합니다.

char ch = 212;
printf("%u", ch);

하지만 이해한다:

4294967252

입수 방법212출력에 대해서요?

이 코드에는 2개의 버그가 있습니다.첫째, 대부분의 C 실장에서는 서명된char, 에 문제가 있습니다.char ch = 212왜냐하면 212는 8비트 서명에 맞지 않기 때문입니다.charC 규격은 동작을 완전히 정의하지 않습니다(동작을 정의하기 위해서는 실장이 필요합니다).대신 다음과 같이 해야 합니다.

unsigned char ch = 212;

둘째, 인printf("%u",ch),ch로 승진하다int표준 C 실장에서는요.하지만, 그%u지정자는 다음을 기대합니다.unsigned intC 표준에서는 잘못된 유형이 전달되었을 때의 동작을 정의하지 않습니다.대신 다음과 같이 해야 합니다.

printf("%hhu", ch);

(용도)%hhu,printf기대하다unsigned char통상적인 C 실장에서는 로 승격되어 있다.int.)

왜냐하면 이 경우,chartype이 시스템에* 서명되어 있습니다.이 경우 데이터는 기본 변환 중에 부호 확장되며 변수 수를 사용하여 함수에 데이터를 전달합니다.212는 0x80보다 크므로 음수로 처리됩니다.%u는 이 숫자를 큰 양의 숫자로 해석합니다.

212 = 0xD4

표지판이 확장되면FF는 사용자의 번호에 프리펜드 되어 있기 때문에

0xFFFFFFD4 = 4294967252

인쇄되는 숫자입니다.

이 동작은, 실장 마다 다릅니다.C99 사양에 따라 모두char유형이 (서명된)로 승격됩니다.int왜냐하면int의 모든 값을 나타낼 수 있습니다.char, 서명 또는 서명 없음:

6.1.1.2: 만약int원래 유형의 모든 값을 나타낼 수 있습니다.이 값은 다음 형식으로 변환됩니다.int; 그 이외의 경우, 이 값은 R/O/O/O로 변환됩니다.unsigned int.

그 결과, 1차적으로int형식 지정자에 따라%u(이것에 의해,unsigned int.

프로그램에서 정의되지 않은 동작을 방지하려면 다음과 같이 명시적 유형 캐스트를 추가하십시오.

unsigned char ch = (unsigned char)212;
printf("%u", (unsigned int)ch);


* In general, the standard leaves the signedness of char up to the implementation. See 이 문제 for more details.

선언하다ch~하듯이

unsigned char ch = 212 ;

그리고 당신의 프린트f는 작동될 것입니다.

어떠한 이유로 선언을 변경할 수 없는 경우 다음을 수행할 수 있습니다.

char ch = 212;
printf("%d", (unsigned char) ch);

char의 범위는 127 ~ -128입니다212를 할당하면 ch에는 212가 아닌 -44(212-128-128)가 저장됩니다.따라서 음수를 부호 없음으로 인쇄하려고 하면 (MAXunsigned int)-abs(number)가 표시됩니다.이 경우 4294967252 입니다.

따라서 212를 그대로 ch에 저장하려면 ch를 ch로 선언하는 것 밖에 할 수 없습니다.

unsigned char ch;

ch 의 범위는 0 ~255 입니다.

★★★★★★★★★★★★★★★★★★char로는 「」입니다.signed가 선언된 합니다.

- +flash >

당신의 가치는 넘쳐납니다.을 해야 .unsigned수식자)unsigned의는 다음과 같습니다.

 0 to 255

하려면 , 의 순서에 .2^bit »char이며, 8비트 길이의 범위만 수 .2 ^(power) 8.

언급URL : https://stackoverflow.com/questions/15736497/how-to-print-an-unsigned-char-in-c

반응형