Math 将十进制转换为十六进制/二进制
我有一道小数学题 有没有办法将十进制数(例如3.14)转换成十六进制或二进制?如果可能的话,有人能在这里放一些教程或考试的链接吗?(我不想在某些语言中使用它,我通常在数学中需要它。)请帮助 编辑: 输入传入代码:Math 将十进制转换为十六进制/二进制,math,floating-point,binary,hex,decimal,Math,Floating Point,Binary,Hex,Decimal,我有一道小数学题 有没有办法将十进制数(例如3.14)转换成十六进制或二进制?如果可能的话,有人能在这里放一些教程或考试的链接吗?(我不想在某些语言中使用它,我通常在数学中需要它。)请帮助 编辑: 输入传入代码: 0.1 ASM代码中的输出: 415740h 另一项输入: 0.058 编译器的另一个输出: 00415748h 但这是如何做到的?它如何转换?十进制到浮点: 我不认为您的输出样本是浮点数编码或.1和.058的其他常见表示形式。我怀疑这些数字是汇编程序或编译器存储浮点编码的地址
0.1
ASM代码中的输出:
415740h
另一项输入:
0.058
编译器的另一个输出:
00415748h
但这是如何做到的?它如何转换?十进制到浮点:
我不认为您的输出样本是浮点数编码或.1和.058的其他常见表示形式。我怀疑这些数字是汇编程序或编译器存储浮点编码的地址 换句话说,您编写了一些包含浮点文本的文本,汇编程序或编译器将该文本转换为浮点编码,将其存储在某个地址,然后将该地址放入从内存加载浮点编码的指令中 这一假设与两个数字相差8的事实是一致的。由于双精度浮点通常为八个字节,因此第二个地址(0x415748)比第一个地址(0x415740)多八个字节 用浮点编码数字的过程大致如下: 设x为要编码的数字 如果x为正,则将s(符号位)设置为0;如果x为负,则将s设置为1。将x设置为x的绝对值 将e(指数)设置为0。重复以下任何一项:
- 如果x等于或大于2,则将1加上e并将x除以2。重复此操作,直到x小于2
- 如果x小于1,则将-1与e相加,并将x乘以2。重复此操作,直到x至少为1
有一些特殊情况:如果原始数字为零,则对s、e和f使用零。(s也可以是1,以表示特殊的“负零”。如果在添加1023之前,e小于-1022,则必须进行一些调整以获得“非标准化”“结果或零,我现在不再进一步描述。如果在添加1023之前,e大于1023,则数字的大小太大,无法用浮点表示。可以通过设置e(添加1023之后)将其编码为无穷大。”到2047,f到零。我不想在某些语言中使用它,我通常在数学中需要它。签出:Mr D-我指的是带逗号的数字(例如521651526)。你不能将浮点数转换为十六进制或二进制。只有自然数才有效。它是十六进制(基数10->基数16),所以,如果你想要浮点,你必须在其中使用浮点,就像FF,EA09一样。但是没有人使用它来解释double/float是如何工作的?它们是由编译器翻译成十六进制的。我在反汇编代码中看到它…你只需将每4个二进制数字转换成1个十六进制就可以了。这是用逗号浮点数表示的数字。它们存储在32位中(或64b表示双精度)。第一位是符号(0=+/1=-),然后是指数的8位(-127-+127),其余是标准化数(不带“1”)。“将x设置为x的绝对值”-你的意思是什么?无论x的值是什么,取其绝对值,并将x更改为该值。因此,如果x为-3,将其设置为3。如果x为3,将其设置为3(这是不变的)。此步骤的目的只是删除符号,以便以下步骤只需处理正数。例如,以下步骤之一计算出指数并将x调整为[1,2]中的值。如果必须写入该步骤,则将正x调整为[1,2],将负x调整为(-2,1],它会更复杂。因此,在这一早期步骤中,我们记住符号(在s中)并将其从x中移除。