C, C++ 분석 보고서
bool과 int의 관계 (In C)
Luana7
2022. 3. 12. 09:00
0은 false고 나머지를 true로 받는 이유는 C 컴파일러 마음대로 이기 때문이다.
역어셈을 해보면 int -> bool하는 과정은 그저 cmp 하나로 작성되어 있음을 알 수 있다
cmp 변수 0x0 (cmp는 compare)
실제로 다음 코드를 역어셈 해보면 재밌는 사실을 알 수 있다
int main() {
int n = 5;
n = !n;
return 0;
}
설명
1줄 : 변수에 5를 할당한다
2줄 : 변수랑 0을 비교해서 Zero Flag를 설정한다
3줄 : Zero Flag에 따라서 0또는 1을 al 레지스터에 넣는다
4줄 : al 레지스터의 값을 eax 레지스터에 넣는다
5줄 : n에 eax의 값. 즉 Zero Flag에 따라 생성된 0 또는 1의 값이 들어간다
따라서 n이 0이 아니기 때문에 Zero flag에 의해서
sete는 0을 반환한다
이후 그 0이 n에 들어가게 되는 것이다
이렇게 n = 0인 상황에서는 cmp가 Zero를 true 설정하기 때문에
값이 달라진다.