请问有人可以告诉我如何将这个浮点数 12.25 转换成二进制吗? 我知道如何将 “12” 转换,但是不知道如何转换 0.25。
非常感谢任何帮助。 谢谢
请问有人可以告诉我如何将这个浮点数 12.25 转换成二进制吗? 我知道如何将 “12” 转换,但是不知道如何转换 0.25。
非常感谢任何帮助。 谢谢
考虑以下例子
我们将分别考虑整数部分和小数部分。
The integral part is easy, 2 = 10.
对于小数部分:
0.625 × 2 = 1.25 1 Generate 1 and continue with the rest.
0.25 × 2 = 0.5 0 Generate 0 and continue.
0.5 × 2 = 1.0 1 Generate 1 and nothing remains.
所以0.625 = 0.101,2.625 = 10.101。
查看此链接获取更多信息。
将小数点后的数字乘以2,直到它变成1.0:
0.25*2 = 0.50
0.50*2 = 1.00
而结果是倒序的,为 .01。
(d表示十进制,b表示二进制)
浮点数的值以IEEE 754格式存储,因此我们不能像整数、字符转换成二进制那样直接将其转换。
但是,我们可以通过指针将浮点数转换为二进制。
#include <stdio.h>
int main()
{
float a = 7.5;
int i;
int * p;
p = &a;
for (i = sizeof(int) * 8 - 1; i >= 0; i--)
{
printf("%d", (*p) >> i & 1);
}
return 0;
}
输出
0 10000001 11100000000000000000000
这里的空格是为了澄清,它们不是程序的一部分。
x = float(raw_input("enter number between 0 and 1: "))
p = 0
while ((2**p)*x) %1 != 0:
p += 1
# print p
num = int (x * (2 ** p))
# print num
result = ''
if num == 0:
result = '0'
while num > 0:
result = str(num%2) + result
num = num / 2
for i in range (p - len(result)):
result = '0' + result
result = result[0:-p] + '.' + result[-p:]
print result #this will print result for the decimal portion
void transfer(double x) {
unsigned long long * p = (unsigned long long * ) & x;
for (int i = sizeof(unsigned long long) * 8 - 1; i >= 0; i--) {
cout << (( * p) >> i & 1);
}
}