C 언어(int&)
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<< 및 ===를 위해 정확한 리셋 버전을 선택하는 데 의미가 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.