반응형
문자 'A'가 0x41과 비교되는 이유는 무엇입니까?
일부 C ++ 코드를보고 다음 구문을 찾았습니다.
if('A' == 0x41) {
// ...
} else if('A' == 0xc1) {
// ...
} else {
// ...
}
다음과 같은 Visual Studio 경고가 표시됩니다.
경고 C4127 조건식이 일정합니다.
Visual Studio가 분명히 옳습니다. 확실히 'A'는 0x41로 정의됩니다. 세 가지 중 두 가지가 죽은 코드라는 점을 감안할 때 작성자가이 코드를 작성하는 이유는 무엇입니까?
0xc1
의 EBCDIC
문자 세트 코드입니다 A
. 저자는 그러한 기계를 테스트하고 있습니다.
언뜻보기에는 그것이 죽은 코드처럼 보일 수 있지만 'A'== 0x41이 항상 true를 반환하지는 않습니다 ..
개발자가 여기서 시도한 것은 ASCII 또는 EBCDIC의 변형을 구현하는 시스템이 어떤 인코딩인지 느리게 찾는 것입니다.
@Richard가 제안했듯이 Capital a 는 International-Extended Binary Coded Decimal Interchange Code의 0xc1 에 매핑됩니다 . if else의 2 분기에서 아래 표를 참조하십시오.
예를 들어 ASCII에서 다른 다른 값을 찾을 수 있습니다.
그는 다음과 같이 할 수있었습니다.
if('p' == 0x70) {
// ...
} else if('p' == 0x97) {
//...
}
참고 URL : https://stackoverflow.com/questions/40592298/why-would-the-character-a-be-compared-with-0x41
반응형
'IT박스' 카테고리의 다른 글
Docker에서 종속 자식 이미지 목록을 가져 오는 방법은 무엇입니까? (0) | 2020.09.08 |
---|---|
ANTLR에서 "단편"은 무엇을 의미합니까? (0) | 2020.09.08 |
Google이 어떻게 그렇게 빠를 수 있습니까? (0) | 2020.09.08 |
route.IgnoreRoute (“{resource} .axd / {* pathInfo}”) 란 무엇입니까? (0) | 2020.09.08 |
IP 주소를 ping 할 수 있는데 InetAddress.isReachable이 false를 반환하는 이유는 무엇입니까? (0) | 2020.09.08 |