Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C/C++;-将浮点转换为字节数组,以便字节保持顺序_C++_C_Floating Point - Fatal编程技术网

C++ C/C++;-将浮点转换为字节数组,以便字节保持顺序

C++ C/C++;-将浮点转换为字节数组,以便字节保持顺序,c++,c,floating-point,C++,C,Floating Point,是否有办法将浮点转换为无符号字符fbytes[8],以便: 如果浮点值f1

是否有办法将
浮点
转换为
无符号字符fbytes[8]
,以便:

如果浮点值
f1
,则
fbytes1[i]
对于
0而言,如果忽略NaN(NaN总是与所有事物比较不相等,包括它们本身),则绝对不应大于
fbytes2[i]
,这很简单。否则,这是不可能的

首先,直接转换为大端字节数组

符号位是第一个字节的高位。以下位是指数,然后是尾数

如果未设置符号位,请将其设置为所有正数排序在所有负数之后

否则,将
~
运算符应用于所有字节(或者在所有字节都打包在一个整数中时执行此操作-为什么还需要字节?)。这将反转负数内的排序顺序,并将它们移到正数下方

您可能还希望合并零(如果在任何位置设置的唯一位是符号位,请清除它)。

如果忽略NaN(NaN总是比较不等于一切,包括它们自己),这很简单。否则,这是不可能的

首先,直接转换为大端字节数组

符号位是第一个字节的高位。以下位是指数,然后是尾数

如果未设置符号位,请将其设置为所有正数排序在所有负数之后

否则,将
~
运算符应用于所有字节(或者在所有字节都打包在一个整数中时执行此操作-为什么还需要字节?)。这将反转负数内的排序顺序,并将它们移到正数下方


您可能还希望合并零(如果在任何位置设置的唯一位是符号位,请清除它)。

如果您的浮点实现使用IEEE-754(大多数使用),您可以利用一个微妙的设计点:如果您将IEEE浮点值的位视为整数值的符号幅度表示,该值上的常规顺序比较将给出与浮点值上相应比较完全相同的顺序,在存在NaN时提供一致的顺序(正NaN大于无穷大,负NaN小于-无穷大)。因此,检查符号位:如果它们不同,则正符号位更大;如果它们是相同的,则将其余的作为整数值进行比较。

如果浮点实现使用IEEE-754(大多数使用),则可以利用一个微妙的设计点:如果将IEEE浮点值的位作为整数值的符号大小表示,该值上的常规顺序比较将给出与浮点值上相应比较完全相同的顺序,在存在NaN时提供一致的顺序(正NaN大于无穷大,负NaN小于-无穷大)。因此,检查符号位:如果它们不同,则正符号位更大;如果它们相同,则将其余的作为整数值进行比较。

为什么需要特定的数字关系?用零左填充单精度浮点由符号位表示,8位表示指数,23位表示尾数。排列这些位应该是一件相对简单的事情,以便保留数字顺序。然而,这不是你在问题中描述的关系。请看,我怀疑最可靠的解决方案是将字节读回浮点变量,然后以通常的方式比较浮点变量。任何避免该步骤的“聪明”操作都可能会变慢,并且在某些情况下可能会给出不正确的结果。@chux:可能需要8个字节才能确保正确的顺序。为什么需要这种特定的数字关系?左填充零一个单精度浮点由符号位表示,指数为8位,尾数为23位。排列这些位应该是一件相对简单的事情,以便保留数字顺序。然而,这不是你在问题中描述的关系。请看,我怀疑最可靠的解决方案是将字节读回浮点变量,然后以通常的方式比较浮点变量。任何避免这一步的“聪明”方法都可能会更慢,并且在某些情况下可能会给出错误的结果。@chux:可能需要8个字节来确保正确的顺序。这与我的想法差不多,但我被OP的计算顺序的公式所抛弃,这对我来说没有意义。你需要字节,因为这是唯一可移植的解析值的方法。这和我的想法差不多,但我被OP的计算顺序的公式所抛弃,这对我来说没有意义。你需要字节,因为这是唯一可移植的解析值的方法。