문자 ‘A’가 0x41과 비교되는 이유는 무엇입니까? … } else if(‘A’ == 0xc1) {

일부 C ++ 코드를보고 다음 구문을 찾았습니다.

if('A' == 0x41) {
  // ...
} else if('A' == 0xc1) {
  // ...
} else {
  // ...
}

다음과 같은 Visual Studio 경고가 표시됩니다.

경고 C4127 조건식이 일정합니다.

Visual Studio가 분명히 옳습니다-확실히 ‘A’는 0x41로 정의됩니다. 세 가지 중 두 가지가 죽은 코드라는 점을 감안할 때 작성자가이 코드를 작성하는 이유는 무엇입니까?



답변

0xc1에 대한 EBCDIC문자 세트 코드입니다 A. 저자는 그러한 기계를 테스트하고 있습니다.

http://www.ibm.com/support/knowledgecenter/en/SSGH4D_15.1.3/com.ibm.xlf1513.aix.doc/language_ref/asciit.html


답변

언뜻보기에는 그것이 죽은 코드처럼 보일 수 있지만 ‘A’== 0x41이 항상 true를 반환하지는 않습니다 ..

개발자가 여기서 시도한 것은 ASCII 또는 다른 변형을 구현하는 시스템이 어떤 인코딩인지 느리게 찾는 것 입니다. EBCDIC의

@Richard가 제안했듯이 Capital aInternational-Extended Binary Coded Decimal Interchange Code의 0xc1 에 매핑됩니다 . if else의 2 분기에서 아래 표를 참조하십시오.

예를 들어 ASCII에서 다른 다른 값을 찾을 수 있습니다.

그는 다음과 같이 할 수있었습니다.

if('p' == 0x70) {
  // ...
} else if('p' == 0x97) {
  //...
}