Двоичная константа 0b00111111110000000000000000000000
является расширением GCC и имеет тип int
, имеющий значение 1069547520
.Он преобразуется в число с плавающей точкой с тем же значением, то есть с плавающей точкой, ближайшей к 1069547520.
Невозможно иметь константы с плавающей запятой в двоичном виде в C;но гекс возможен.Если бы это было, то 1.5 было бы выражено в двоичном виде просто как что-то вроде
0b1.1f
, то есть его числовое значение в двоичном виде было 1.1
.
C17 (C99, C11) действительно имеет поддержкудля шестнадцатеричные константы с плавающей точкой ;Вы можете использовать
0x1.8p0f
для 1.5f
;p0
означает показатель степени.
Если вы действительно хотите поиграть с двоичным форматом IEEE 754, вам нужно использовать объединение или memcpy
.Например
#include <stdio.h>
#include <string.h>
#include <stdint.h>
int main(void) {
float a;
uint32_t a_v = 0b00111111110000000000000000000000;
memcpy(&a, &a_v, sizeof(float));
printf("%f\n", a);
// prints 1.500000 on linux x86-64
}