programing

C에서 '0'을 빼면 문자가 나타내는 숫자가 되는 이유는 무엇입니까?

magicmemo 2023. 8. 4. 22:59
반응형

C에서 '0'을 빼면 문자가 나타내는 숫자가 되는 이유는 무엇입니까?

누가 이것이 왜 효과가 있는지 설명해 줄 수 있습니까?

char c = '9';
int x = (int)(c - '0');

문자의 아스키 코드에서 '0'을 빼면 해당 문자가 나타내는 숫자가 되는 이유는 무엇입니까?

왜냐하면 문자는 모두 숫자로 표시되고 '0'이 그들 중 첫 번째이기 때문입니다.

아래 표에서 다음을 확인할 수 있습니다.

'0' => 48
'1' => 49


'9' => 57.

결과적으로: ('9'-'0') = (57 − 48) = 9

enter image description here 출처: http://www.asciitable.com

char정수 유형입니다. 마찬가지입니다.int그리고 가족.유형의 객체char숫자 값이 있습니다.문자 리터럴에 입력하는 문자 간의 매핑(예:'0') 및 그 가치.char실행 문자 집합에서 해당 문자의 인코딩에 따라 개체가 결정되었습니다.

  • C++11 §2.14.3:

    실행 문자 집합에서 표시할 수 있는 단일 c-char를 포함하는 일반 문자 리터럴은 유형을 가집니다.char실행 문자 집합에서 c-char 인코딩의 숫자 값과 동일한 값을 사용합니다.

  • C99 § 6.4.4.4:

    정수 문자 상수는 단일 따옴표로 둘러싸인 하나 이상의 다중 바이트 문자 시퀀스입니다.'x'.

    [...]

    정수 문자 상수에 유형이 있습니다.int.

    참고:int로 변환할 수 있습니다.char.

실행 문자 집합의 선택은 구현에 달려 있습니다.대부분의 경우 선택 항목은 ASCII와 호환되므로 다른 답변에 게시된 표의 값이 적합합니다.그러나 문자 집합이 ASCII와 호환될 필요는 없습니다.하지만 몇 가지 제한 사항이 있습니다.그 중 하나는 다음과 같습니다(C++11 §2.3, C99 §5.2.1).

a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9
_ { } [ ] # ( ) < > % : ; . ? * + - / ^ & | ~ ! = , \ " ’

[...]

소스 및 실행 기본 문자 집합 모두에서 위의 소수 자릿수 목록에서 0 뒤에 있는 각 문자의 값은 이전 문자의 값보다 1 커야 합니다.

이것은 캐릭터의 가치가 무엇이든'0'has, 캐릭터'1'보다 가치가 하나 더 있습니다.'0'그리고 성격'2'그 이상의 가치를 가지고 있습니다.숫자 문자에는 연속된 값이 있습니다.매핑을 다음과 같이 요약할 수 있습니다.

Character:            0    1    2    3    4    5    6    7    8    9
Corresponding value:  X    X+1  X+2  X+3  X+4  X+5  X+6  X+7  X+8  X+9

모든 숫자 문자에는 다음 값에서 오프셋된 값이 있습니다.'0'.

그 말은, 만약 여러분이 캐릭터를 가지고 있다면,'9'를 뺀 값'0'그으로부터, 당은값거 "사리를 "의니다"의 값 .'9' 그고 그가 치리의 값.'0'실행 문자 집합에 있습니다.그들은 연속적이기 때문에, 거리는 9가 될 것입니다.

왜냐하면 C 표준은 캐릭터들이0, 1, 2, 3, 4, 5, 6, 7, 8, 9숫자 문자 코드와 관련하여 항상 이 순서에 있습니다.그래서, 만약 당신이 문자 코드를 빼면.'0'다른 숫자로부터, 그것은 그것의 위치를 줄 것입니다.0그 가치는...

C 표준, 섹션 5.2.1 문자 집합:

소스 및 실행 기본 문자 집합 모두에서 위의 소수 자릿수 목록에서 0 뒤에 있는 각 문자의 값은 이전 문자의 값보다 1 커야 합니다.

왜냐하면, 리터럴은 순서대로 배열되어 있기 때문입니다.

그래서 만약에048살이었고,149세가 됩니다250 등이 될 것입니다.그러면 ASCII로x값 포, ASCII 값'9'의 ASCII 값 뺀 값의 을 뺀 값'0' 즉의 값, ASCII 값'9'이 될 이므로 57 가될 것이 고서세, 따라,,x을포할 것다니입을 할 수 .57 - 48 = 9.

또한.char는 적분 유형입니다.

숫자 문자의 아스키 코드는 순서대로 정렬됩니다.'0' '1' '2' '3' '4' '5' '6' '7' '8' '9'아스키 표에 나타난 바와 같이

그래서 만약 우리가 sii 사이에 차이를 만든다면.'9'및 의 아스키.'0'우리는 얻을 것입니다.9

ASCII 표에서 숫자는 다음에 대한 가장 낮은 코드부터 순서대로 정렬됩니다.0에서 더큰 숫를빼면에서 더 큰 ,0두 ASCII 값의 차이를 만듭니다.9가치가 있습니다.57그리고.0가지다48그래서 57에서 48을 빼면 9가 됩니다.ASCII 표를 보십시오.

여기 보세요.

ASCII 표를 봅니다.

'9' in ASCII =  57 //in Decimal

'0' in ASCII =  48 //in Decimal

57 - 48 = 9

먼저 시도:

cout << (int)'0' << endl;

이제 시도:

cout << (int)'9' << endl;

문자는 텍스트 형식으로 숫자를 나타내지만 숫자로 사용할 경우 값이 다릅니다.Windows에서는 숫자를 사용하여 인쇄할 문자를 결정합니다.그래서 숫자 0x30은 윈도우 OS에서 문자 0을 나타냅니다.숫자 0x39는 문자 9를 나타냅니다.결국, 컴퓨터가 인식할 수 있는 것은 숫자뿐이고, "문자"가 무엇인지 알지 못합니다.

(int)('f' - '0')하지만 15와 같지는 않습니다.

이렇게 하면 다양한 문자와 창에서 해당 문자를 나타내는 데 사용하는 숫자가 표시됩니다.http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx

은 다음과 같이 할 수 : 다 OS 에 검 경 검 수 다 있 습 니 할 색 을 다 음 른 우 대 필Virtual Key Codes <OSname>OS의할 수 .다른 OS의 코드를 확인할 수 있습니다.

언급URL : https://stackoverflow.com/questions/15598698/why-does-subtracting-0-in-c-result-in-the-number-that-the-char-is-representing

반응형