[课业] 105年程式设计考古题

楼主: blueclock (小杨)   2017-05-14 16:50:52
根据 IEEE 754 二进制浮点数算术标准,请问下列 C 语言程式码执行后输出为何?
int main(){
float A = 100;
float B = -125.53125;
printf("%08X\n", *(unsigned int *) &A);
printf("%08X\n", *(unsigned int *) &B);
}
解答:
42C80000
C2FB1000
我的想法:
在*(unsigned int *) &A这部分
是强制转换成一个无号整数型态的指标变量 并指向A的位址
而最前方的*则代表会显示A位址的内容(值)
也就是最后会以无号整数的型态显示出A的内容
======================================================
以上是我的想法若有错误还请纠正
解答部分是将100用浮点数表示法转换成
01000010110010000000000000000000
也就是浮点数的32位元
再将这32位元用16进位表示法显示出来成为42C80000
但今天我自己在程式中加入以下叙述
float C = 100;
printf("%08X", (unsigned int) C);
则只显示成00000064
为何电脑不会先转换成浮点数表示法再用16进位去做转换 而是直接将100转成16进位?
还请知道的大大提点 感谢
作者: manlike ( )   2017-05-14 17:21:00
扯ㄟ...你程式又没取指标 (unsigned int) &C*看懂你的问题啦~ 因为你是直接转型所以就变100啦(unsigned int) C; //已经变成整数表示法
作者: pt7441 (批踢)   2017-05-14 18:03:00
(int)强制转型 (int*) 以int解析值
作者: gfxg   2017-05-14 21:57:00
反正一定是考你电脑内部是怎么表示浮点数,一定是考IEEE 754那个指标的型别转换想好久还是想不懂

Links booklink

Contact Us: admin [ a t ] ucptt.com