- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的 C 代码有点麻烦。我正在尝试提取符号、指数和尾数。到目前为止,它计算出了符号和指数。问题从尾数开始。例如,我们以 -5.0 为例。 1 位用于符号,8 位用于指数,23 位用于尾数。这是 -5.0 的二进制表示法:
1 10000001 01000000000000000000000
1 = 符号
10000001 = 指数
01000000000000000000000 = 尾数。
我想返回尾数的位。
static int fpmanitssa(uint32_t number) {
uint32_t numbTemp = 8388607;
number = number & numbTemp; //bitwise AND, number should be 2097152.
int numbDiv;
int leftover;
char resultString[23];
size_t idx = 0;
do {
numbDiv = number/2;
leftover = number % 2;
resultString[idx++] = leftover;
number = numbDiv;
} while (number != 0);
return resultString;
我得到的结果是负数。我不知道为什么它不起作用。能否请您帮忙找出问题所在?
问候萩市
最佳答案
1) float 有尾数(线性刻度,也叫小数部分),没有尾数(对数刻度)。
2) 您的函数被声明为返回一个int
,但您试图返回resultString
,它是一个char
数组。 char
数组不是 int
,无法自动转换为 int
。
3) 如果返回resultString
,会失败,因为resultString
的生命周期只是函数执行的时间;函数返回后不能使用。如果您确实打算从函数返回字符,则应声明它,以便调用者传入一个大小合适的现有数组,或者函数动态分配一个数组(与 malloc
一样)并返回其地址给负责最终解除分配它的调用者(使用 free
)。
4) 如果你想返回一个 int
带有编码有效位的位,并且 number
包含编码有效位在低位的编码 float 位,那么您所要做的就是使用 AND 运算移除高位并返回低位。
5) 如果 char 数组是要形成一个可打印的数字而不是数字位,则应在每个位上添加 '0'
,将其从整数 0 或 1 转换为字符“0”或“1”。在这种情况下,您可能还希望在 resultString
的末尾有一个空字符。
6) resultString
的位按照从低位到高位的顺序分配,如果 resultString
打算稍后打印,这可能与期望的顺序相反. (如果 resultString
只用于计算而不是打印,顺序可能没问题。)
7) 以上假定您只想返回编码后的有效位,即浮点编码中的显式位。如果要返回表示的有效位,包括隐式位,则需要第 24 个th 位置,如果指数非零则为 1,否则为 0。 (当然,假设该数字不是 NaN 或无穷大。)
关于c - 将尾数作为位返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16614283/
单精度(32 位):位除法为 like this : 所以我们有 23 位的尾数/有效数。 因此我们可以表示 2^23 个数字(通过 23 位):即 8388608 --> 7 位长。 但是 我读到尾
所以,我正在尝试编写一个函数,以其 (mantissa * 2^exponent) 格式打印给定的 float (n)。我能够得到符号和指数,但不能得到尾数(无论数字是多少,尾数始终等于 0.0000
我是一名优秀的程序员,十分优秀!