Nicely written about binary logarithm function, which 'returns the binary exponent':
Function: logb x
This function returns the binary exponent of x. More precisely, if x is finite and nonzero, the value is the logarithm base 2 of |x|, rounded down to an integer. If x is zero or infinite, the value is infinity; if x is a NaN, the value is a NaN.
(logb 10)
⇒ 3
(logb 10.0e20)
⇒ 69
(logb 0)
⇒ -1.0e+INF
( https://www.gnu.org/software/emacs/manual/html_node/elisp/Float-Basics.html )
It's indeed so. IEEE 754 usually encoded in binary, including exponent.
Let's grind out the exponent from the single-precision IEEE 754 number:
// copypasted from https://stackoverflow.com/questions/15685181/how-to-get-the-sign-mantissa-and-exponent-of-a-floating-point-number
#include <stdio.h>
#include <stdlib.h>
typedef union
{
float f;
struct {
unsigned int mantisa : 23;
unsigned int exponent : 8;
unsigned int sign : 1;
} parts;
} float_cast;
int main(int argc, char *argv[])
{
int x = strtod(argv[1], NULL);
float_cast d1 = { .f = x };
printf("sign = %d\n", d1.parts.sign);
printf("exponent = %d\n", d1.parts.exponent);
// https://en.wikipedia.org/wiki/Exponent_bias
printf("exponent-exponent_bias(127) = %d\n", d1.parts.exponent-127);
printf("mantisa = %d\n", d1.parts.mantisa);
}
% ./a.out 123456 sign = 0 exponent = 143 exponent-exponent_bias(127) = 16 mantisa = 7413760
Yes:
% python3 >>> import math >>> math.log(123456, 2) 16.913637428049103And this is nice, zero mantissa:
% ./a.out 1024 sign = 0 exponent = 137 exponent-exponent_bias(127) = 10 mantisa = 0 % ./a.out 65536 sign = 0 exponent = 143 exponent-exponent_bias(127) = 16 mantisa = 0 ...
Calculate: \( 2^{10}=1024 \), \( 2^{16}=65536 \).
Also, all this can be checked with the online IEEE 754 calculator.

Yes, I know about these lousy Disqus ads. Please use adblocker. I would consider to subscribe to 'pro' version of Disqus if the signal/noise ratio in comments would be good enough.