float에 1을 저장하면 도대체 어떻게 들어가있는 거길래 %d로 출력해보면 계속 값이 바뀌는건지 알려줄수 있겠노?
c++ 질문하나만 해도 되냐
거울속의나(songj722)
2020-06-10 20:36
추천 0
댓글 15
다른 게시글
-
c언어 질문 하나만 할게요 [15]ㅇㅅㅇ(222.239) | 20.06.10추천 0
-
폰노이만이 씹덕이여써? [3]익명(218.144) | 20.06.10추천 0
-
비쥬얼 스튜디오 쓸때 간헐적으로 이런게 뜸 해결 방법좀 알려주세요 [3]익명(121.165) | 20.06.10추천 0
-
커널레벨최적화 [1]익명(223.62) | 20.06.10추천 0
-
개발자 구하기 참 쉬워진듯 ㅋ [1]익명(39.7) | 20.06.10추천 2
-
비씹덕 개발자 = 능력 없는 뗄감 [7]천록아파트..(stdlib) | 20.06.10추천 2
-
개발자가 덕후 라는건 옛날말이지 [6]익명(218.144) | 20.06.10추천 0
-
나한테 댓글로 욕하면 진심으로 자살할거다 [7]익명(111.118) | 20.06.10추천 0
-
오따쿠 모여여 [1]익명(219.250) | 20.06.10추천 0
-
나 존나 획귀적인 아이디어 떠올랐는데 동업할분 [6]천록아파트..(stdlib) | 20.06.10추천 0
float인데 왜 %d이냐
부동소수점 검색해보라규
데이터 표현 방식자체가 다른데
계속바뀔리가엎ㅅ는데
계속바뀌는거 스샷찍어서 올려봐
부동 소수점 몰라서 그러겠음.... 부동소수점으로 저장한 데이터를 읽어오는건데 그 값이 실행할때마다 바뀌는 이유가 궁금하다
부동소수점은 이해했다
물음표가 안쳐졌노
해당 댓글은 삭제되었습니다.
그냥 값이 왜변하는지만 알려주면 안되겠노
해당 댓글은 삭제되었습니다.
게이야....
애초에 그거 처리 안해주면 느려터졌잖아
값이 변한건 아님. 엄밀히 말하면 인자를 못받은거임. 저건 컴파일러마다 다른데, 저렇게 동작하는 대표적인 예는 리눅스 환경에서 64비트 플래그를 주고 gcc를 돌릴때임. 저렇게 컴파일하면 함수 호출 시 integer와 floating point 인자는 각기 다른 두 곳에 쌓여서 전달되는 특징이 있고 저 printf함수의 내부 동작부분에서 정수부분쪽 아규먼트를 꺼내려고 하는데, 그곳에는 별다른 값이 들어가지 않았기 때문에 그 전에 들어가 있던 값이 출력되는 것이지. (구체적으로 integer 인자는 rdi, rsi, rdx 등등의 레지스터에 순서대로 저장되고 floating point 아규먼트는 xmm0, xmm1 ... 에 순서대로 저장되어 넘어간다.)
저 상황을 추정해보면 printf호출시 첫 인자는 포맷 스트링("%d"같은..)일 것이고 이것은 포인터(주소)이며 정수취급이기 때문에 rdi에 저장됨. 그 다음에 너가 넣었을 floating point변수는 xmm0에 저장되서 넘어감. 이렇게 넘어갔지만 printf는 어느 레지스터로 인자가 넘어왔는지 알 도리가 없고 단지 포맷스트링의 %d를 보고 rsi 에 인자가 들어가 있을걸 기대하고 거기서 값을 취해서 출력할 뿐이지. 이부분이 핵심이야. 너의 코드 어느곳에도 rsi에는 값을 넣지 않았거든. 그래서 랜덤값이 찍힌거고.