memcpy 함수 관련 질문
조회수 590회
float 형 변수와 uint 형 변수가 있습니다.
float 형 변수에 0.xxxxxxxxxxxx 식의 값이 들어있는 상태입니다.
여기서 uint = float 를 해버리면 소수점을 버려버리기 때문에 결국 uint = 0 이 되는것 아닙니까?
근데 만약 memcpy 함수를 사용하여 memcpy(&uint, &float, 4) 를 한경우에는 어떻게 되나요?
소수점 이하도 살려서 int형 변수에 넣어줄 수 있는겁니까?
uint = xxxxxxxxxxxxxxxxxx 이런식으로요.
다른 사람이 짠 코드 구경하고 있는데
memcpy를 사용해 float의 값을 int로 넣어주는것이 아주아주 많이 보여서 말이죠.
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
https://www.ibm.com/support/knowledgecenter/ko/ssw_ibm_i_73/rtref/memcpy.htm
최상위비트에서부터 복붙해넣는 것 같습니다. uint 형의 바이트 형태와, float 형의 바이트 형태로 생각하시면 되겠습니다.
uint 의 바이트코드 형태는 기본적으로 2의 보수법을 기반으로하는 2진법의 그냥 단순한 integer 형태이고, float 형은 부동소수점 같은 경우에는 표현방식이 달라서 생각하는대로는 안될 것 같습니다.
https://ko.wikipedia.org/wiki/IEEE_754
원하시는바가 무엇인지 이해됩니다.
그렇게 하실려면 IEE_754 의 표기방식에서 소숫점 아래의 숫자들을 파악하고 가져와서 합성하는 코드를 작성하셔야 할 겁니다. 그러니까, Shift 연산 후에 그렇게 하시면 될 것 같습니다.
댓글 입력