我有一個任務,需要我將浮點數轉換爲IEEE 754二進制表示。我已經完成了部分部分,但我不知道如何將數字分解成部分(信號,指數和分數)。這裏是我有的代碼:如何在零件中分解二進制數? C語言
typedef unsigned char Byte;
void showbits(char str[], Byte data[], int size) {
int i, j;
int bit;
printf ("%s = ", str);
for(i = size-1; i>=0; i--){
for(j = 7; j >= 0; j--){
bit = (data[i] >> j) & 1;
printf ("%d", bit);
}
printf (" ");
}
printf ("\n");
printf("signal: %d\n", (data[size - 1] >> 7) & 1);
printf("exponential: ");
printf("%d", (data[size-2] >> 6) & 1);
printf("%d", (data[size-3] >> 5) & 1);
printf("%d", (data[size-4] >> 4) & 1);
printf("%d", (data[size-5] >> 3) & 1);
printf("%d", (data[size-6] >> 2) & 1);
printf("%d", (data[size-7] >> 1) & 1);
printf("%d", (data[size-8] >> 0) & 1);
printf("%d", (data[size-9] >> 7) & 1);
printf("\nfraction: ");
printf("%d", (data[21] >> 6) & 1);
printf("%d", (data[20] >> 5) & 1);
printf("%d", (data[19] >> 4) & 1);
printf("%d", (data[18] >> 3) & 1);
printf("%d", (data[17] >> 2) & 1);
printf("%d", (data[16] >> 1) & 1);
printf("%d", (data[15] >> 0) & 1);
printf("%d", (data[14] >> 7) & 1);
printf("%d", (data[13] >> 6) & 1);
printf("%d", (data[12] >> 5) & 1);
printf("%d", (data[11] >> 4) & 1);
printf("%d", (data[10] >> 3) & 1);
printf("%d", (data[9] >> 2) & 1);
printf("%d", (data[8] >> 1) & 1);
printf("%d", (data[7] >> 0) & 1);
printf("%d", (data[6] >> 7) & 1);
printf("%d", (data[5] >> 6) & 1);
printf("%d", (data[4] >> 5) & 1);
printf("%d", (data[3] >> 4) & 1);
printf("%d", (data[2] >> 3) & 1);
printf("%d", (data[1] >> 2) & 1);
printf("%d", (data[0] >> 1) & 1);
}
int main(int argc, const char * argv[]) {
float f;
scanf("%f", &f);
showbits("float", (Byte *)&f, sizeof(float));
return 0;
}
另外,有人可以解釋我爲什麼有一個循環在那裏,從7開始,到0?我沒有那樣做...... 謝謝!
爲什麼不能直接顯示'f'的位?他們已經在IEEE 754表示 – 2015-03-30 20:54:42
該任務讓我把它分解成幾部分,並說哪個部分是哪個.. – 2015-03-30 20:55:37
還是一樣的。該標準對於固定位置具有固定的含義,所以我沒有看到問題。 – 2015-03-30 20:58:27