Просто в дополнение к ответу @John Bode, попробуйте (и, возможно, отладьте) следующий код, чтобы прояснить ситуацию.
Это похоже на один и тот же битовый шаблон;
- в очках
float
, - в очках
int
.
#include <stdio.h>
#include <stdlib.h>
void printBits(int k) {
char bitStr[33];
// put a string terminator at end of string
bitStr[32] = '\0';
for (int i = 0; i < 32; i++) {
if (k & 1) {
bitStr[31 - i] = '1'; // if 32nd bit is 1
}
else {
bitStr[31 - i] = '0'; // if 32nd bit is 0
}
k = k >> 1; // shift all bits 1 bit right, dropping the right most (32nd) bit
}
printf("%s", bitStr);
return;
}
int main()
{
float f = 1.0f;
int i = *(int *)&f;
printf("bit pattern ");
printBits(*(int *)&f);
printf(" equals to %f in float\n", f);
printf("bit pattern ");
printBits(i);
printf(" equals to %d in integer\n", i);
return 0;
}