C语言中,单精度浮点数十进制时是22.84,转化为16进制是多少,怎么转化的
一共五个问题,一个20分或40分,请分点作答。 展开
整数部分用16除,反向取余数;小数部分用16乘,正向取整数。具体如下:
22÷16 = 1 余 6
1÷16 = 0 余 1
所以整数部分是16。小数部分
0.84x16 = 13(D) . 44
0.44x16 = 7 .04
0.04x16 = 0 .64
0.64x16 = 10(A) .24
0.24x16 = 3 .84
0.84x16 = 13(D) . 44
...以后循环了,所以
22.84(10) = 16.D70A3D70A3...(16)
还可以先“用2除反向取余数”和“用2乘正向取整数”变成二进制,再从小数点开始左右每4位分开,前后不足4位的用0补齐,然后用对应的16进制符号直接写出来就可以了。22.84化成二进制是10110.11010111000010100011...→1'0110.1101'0111'0000'1010'0011→0001'0110.1101'0111'0000'1010'0011→16.D70A3...
要写代码,如下便可:
#include "stdio.h"
int main(void){
double x=22.84,t;
char h[17]="0123456789ABCDEF", i,k;
printf("%g(10) = %x.",x,int(x));
for(t=x-int(x),i=0;i<10;i++){
k=int(t*=16),t-=k;
printf("%c",h[k]);
}
printf("...(16)\n");
return 0;
}
C/C++没有提供以指针形式输出16进制数据的功能。
2016-05-18