C에서 '0'을 빼면 문자가 나타내는 숫자가 되는 이유는 무엇입니까?
누가 이것이 왜 효과가 있는지 설명해 줄 수 있습니까?
char c = '9';
int x = (int)(c - '0');
문자의 아스키 코드에서 '0'을 빼면 해당 문자가 나타내는 숫자가 되는 이유는 무엇입니까?
왜냐하면 문자는 모두 숫자로 표시되고 '0'이 그들 중 첫 번째이기 때문입니다.
아래 표에서 다음을 확인할 수 있습니다.
'0' => 48
'1' => 49
'9' => 57.
결과적으로: ('9'
-'0'
) = (57 − 48) = 9
출처: 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 커야 합니다.
왜냐하면, 리터럴은 순서대로 배열되어 있기 때문입니다.
그래서 만약에0
48살이었고,1
49세가 됩니다2
50 등이 될 것입니다.그러면 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
'programing' 카테고리의 다른 글
Node.js에서 버퍼를 읽기 가능한 스트림으로 변환 (0) | 2023.08.04 |
---|---|
Android에서 텍스트 편집 비활성화 (0) | 2023.08.04 |
jQuery에서 입력 파일이 비어 있는지 확인하는 방법 (0) | 2023.08.04 |
Oracle에서 오른쪽 괄호가 누락되었다고 생각하는 이유는 무엇입니까? (0) | 2023.08.04 |
클래스 상수가 있는지 확인합니다. (0) | 2023.08.04 |