2013-07-08 50 views
1

我正在學習計算機科學書中的Integer數據格式,據我所知,無論是正數還是負數,整數的二進制表示都是讓最左邊的位(msb)爲0表示正數或1表示正數消極的,讓我們說在一個8位計算機中,我怎麼知道它是在談論10000010 - 130以10爲底,還是指的是負2? 我可能是錯的,如果我請糾正我。如何知道它是一個正數還是負數還是指的是二進制數字?

回答

2

看一看發佈這個問題的答案:Negative numbers are stored as 2's complement in memory, how does the CPU know if it's negative or positive?

CPU使用一種叫做操作碼,以確定哪些功能操縱內存位置時,它會採取(在這種情況下,價值10000010) 。這是CPU內部的功能,可以將其作爲負數或正數來操作。 CPU無權訪問該數字是否帶符號或無符號 - 它在處理該數字時使用操作碼來確定它是否應該是帶符號或無符號操作。

3

如果你只是在某處看到字符串10000010,我不知道......寫在牆上什麼的,你怎麼知道如何解釋它?你可能會說,嘿,這是千萬和十(你認爲它是基數爲10),或者你可能會說嗨,那是-126(你認爲它是二進制補碼二進制),或者你可能會說這是正數130(你認爲這是標準的二進制)。

從理論上講,無論做什麼解釋,它都是如何解釋的。

因此,當一臺計算機拿着8位數據時,它是如何解釋它的。

現在,如果你正在編程,你可以告訴計算機如何你想要的東西解釋。例如,在C++

// char is 1 byte 
unsigned char x = 130u; 

在這裏,我已經告訴編譯器將130 無符號成一個字節,所以計算機將存儲10000010,將它解釋爲價值130

現在考慮

// char is 1 byte 
char x = -126; 

在這裏,我已經告訴編譯器將-126 簽署成一個字節,所以計算機將重新存儲10000010但這一次它會將其解釋爲值-126。

相關問題