任何人都可以告诉我如何将这个浮点数转换为12.25到二进制? 我知道如何转换“12”而不是0.25
非常感谢任何帮助。 感谢
答案 0 :(得分:24)
将十进制后的数字乘以2,直到它变为1.0:
0.25*2 = 0.50
0.50*2 = 1.00
,结果的顺序为.01
答案 1 :(得分:17)
考虑以下示例
我们将分别考虑整数和小数部分。
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。
有关详细信息,请参阅this链接。
答案 2 :(得分:13)
(d表示十进制,b表示二进制)
答案 3 :(得分:4)
浮点值以IEEE 754格式存储,因此我们无法将其直接转换为整数,char转换为二进制。
但我们可以通过指针将float转换为二进制。
#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
添加了空格以便澄清,它们不包含在程序中。
答案 4 :(得分:1)
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
答案 5 :(得分:0)
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);}}