C 언어(int&)

1276 단어
출력 결과를 묻는 C 프로그램이 있습니다.
float a = 1.0f; 

cout < < (int)a < < endl; 

cout < < (int&)a < < endl; 

cout < < boolalpha < < ( (int)a == (int&)a ) < < endl; //     ? 

float b = 0.0f; 

cout < < (int)b < < endl; 

cout < < (int&)b < < endl; 

cout < < boolalpha < < ( (int)b == (int&)b ) < < endl; //     ? 

주로 이해하다
(int&)a의 의미(int&)a는 a의 강제 형식을 정형 인용으로 바꾸고 a가 가리키는 네 바이트를 int형으로 해석하는 것을 말한다.
회전: (int)a는 실제적으로 부동점수 a를 매개 변수로 하나의 정형수를 구성하고 이 정수의 값은 1이고 (int&)a는 컴파일러가 a를 정수로 보는 것을 알려준다(실질적인 변환을 하지 않았다).1을 정수로 저장하는 것과 부동점으로 저장하는 것은 메모리 데이터가 다르기 때문에 양자가 다르다.b에 대한 두 가지 전환의 의미는 같지만 0의 정수 형식과 부동점 형식은 메모리 데이터가 같기 때문에 이런 특수한 상황에서 둘은 같다(단지 수치의 의미에서).프로그램의 출력에 (int&)a=1065353216이 표시됩니다. 이 값은 어떻게 된 것입니까?앞에서 말했듯이 1은 부동점수 형식으로 메모리에 저장되고 iee754의 규정에 따라 그 내용은 0x0000803F(바이트의 반순을 고려했다).이것이 바로 a라는 변수가 차지하는 메모리 단원의 값이다.(int&)a가 나타났을 때, 그것은 상하문을 알려주는 것과 같다. "이 주소를 정수로 봐라. 원래 무엇이든지 상관하지 마라."이렇게 해서 내용 0x0000803F는 정수로 해석하는데 그 값이 바로 1065353216(10진수)이다.어셈블리 코드를 보면'(int)a는 하나의 값이 a와 같은 정형수를 재구성한 것과 같다'는 주장을 증명할 수 있지만, (int&)의 역할은 단지 하나의 유형 정보를 표현하는 것일 뿐,cout<< 및 ===를 위해 정확한 리셋 버전을 선택하는 데 의미가 있다.

좋은 웹페이지 즐겨찾기