計算機系統

fun. 逗~發表於2020-11-08

題目:以下C語言程式輸出為什麼是0?

#include <stdio.h>

int main(void) { 
	printf("%f",10/2);
	return 0;
}

解釋:

10/2=5,為無符號整型資料,佔據32位。

  • 原碼:00000000000000000000000000000101
  • 反碼:111111111111111111111111111111111010
  • 補碼:111111111111111111111111111111111011

因為是用%f的格式輸出,所以計算機會將整形資料當作浮點型資料解釋
IEEE754浮點數標準

符號階碼尾數
01~8
9~31

其中:

第0位為符號位
第1~8位為移碼錶示的階碼
剩下24為二進位制原碼小數表示的尾數

因為計算機會將現實世界的資料(即真值)先轉換為機器數(即補碼),故程式中5這個數在計算機中用浮點數解釋如下:

符號階碼尾數
1111 11111111111111111111111111111101

在這裡插入圖片描述

階碼全為1,數值為0

相關文章