인프런 커뮤니티 질문&답변

dohyun_lim님의 프로필 이미지
dohyun_lim

작성한 질문수

독하게 되새기는 C 프로그래밍

정수와 Endian 그리고 2의 보수

정수와 Endian 그리고 2의 보수 15:05쯤 질문이있습니다.

해결된 질문

작성

·

356

·

수정됨

0

 안녕하세요 선생님 질문이 2개 있습니다.

1) 15:05쯤에

"1byte의 메모리에 64bit 상수가 주소로 부여됩니다."

라는 의미가

단순히 저 메모리 창에서 메모리(1byte)에 대한 주소를 2^64 까지 부여할 수 있으니까 0x자릿수가 늘어난것이다.

라고 이해하면 맞나요..?

 

2) 추가적으로 a의 타입을 float , double로 바꾸는 경우 전혀 다른 값이 들어가던데 gpt를 통해 검색하니

Let's break down the hexadecimal representation "00 00 20 41" into binary and decode it:

Convert each hexadecimal digit into its corresponding 4-bit binary representation:

0: 0000
2: 0010
0: 0000
4: 0100
1: 0001
Concatenate the binary representations:

000000000000001000000100000001
Split the binary representation into its components based on the IEEE 754 format:

Sign bit (1 bit): 0 (positive value)
Exponent bits (8 bits): 00000000
Mantissa bits (23 bits): 00000100000000100000001
Apply the IEEE 754 formula:

Sign: 1^(0) = 1 (positive)
Exponent: 2^(0) - 127 = -127
Mantissa: 1.00000100000000100000001 (binary)
The final value is calculated as (1 + mantissa) * 2^(exponent):

(1 + 1.00000100000000100000001) * 2^(-127) = 1.00000100000000100000001 * 2^(-127) = 1.00000100000000100000001 * 2^(-23) * 2^(-104) ≈ 10
Therefore, the hexadecimal representation "00 00 20 41" corresponds to the floating-point value 10 in C.


이런식으로 설명해줬는데 부동소수점 관련된이야기인것을 알겠는데 자세히 알아야 하나요...?

답변 1

1

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

  1. 64비트 시스템은 1바이트 메모리에 64비트(2^64)주소를 부여해 관리합니다. 0x자릿수가 늘어난 것은 64비트 상수라서 그렇습니다.

  2. 이는 IEEE 754 표준과 관련된 내용입니다. 단정도 형식(float)과 배정도 형식(double)은 구조가 다르기 때문에 16진수로 봤을 때 같은 값으로 보여도 당연히 해석방식이 달라지면 전혀 엉뚱한 값이 됩니다. ChatGPT는 이를 좀 더 구체적으로 설명해주고 있는 것입니다.

참고하시기 바랍니다.

dohyun_lim님의 프로필 이미지
dohyun_lim
질문자

강의를 들으니 뒤에 다 내용이 나오는군요..ㅋㅋㅋ

답변 감사합니다.

태어나서 첨으로 Hxd로 막 수정하고 이런거 해보니까 너무 신기하고 재미있네요 감사합니다.

dohyun_lim님의 프로필 이미지
dohyun_lim

작성한 질문수

질문하기