php小編子墨為大家帶來了一篇關於「以位移位計算結果的差異」的文章。在電腦程式設計中,位移運算是一種常見的操作,它可以對二進位數進行左移或右移操作。然而,不同的程式語言對於位移運算的結果處理可能存在差異,這一點需要開發人員注意。本文將詳細介紹不同程式語言中位移運算結果的差異,並提供一些實例來幫助讀者更好地理解和應用位移運算。無論你是初學者還是有一定程式設計基礎的開發人員,都能從本文中獲得有用的知識和技巧。
我的 go 程式的輸出有差異,特別是變數 x1 和 x2。這是相關的程式碼片段:
package main var n uint = 10 const N uint = 10 func main() { var x1 byte = (1 << n) / 100 var x2 byte = (1 << N) / 100 println(x1, x2) }
預期輸出: 10 10
實際輸出: 0 10
對差異背後的原因感到好奇,尋求解釋。
常數表達式以未指定的精度進行計算。所有分配給 x2
的內容都是恆定的,因此它可以正確計算 210 / 100 = 1024 / 100 = 10。而在第一個表達式中,1 被視為 byte
,這表示它會立即移出。 1 必須被視為 byte
位於規格中:
如果非常量移位表達式的左操作數是無型別常數,則它首先會隱式轉換為移位表達式僅由其左操作數取代時所假定的型別。
1 是左邊的無型別常數,n
為var
使得表達式變得非常量,因此1 必須具有其受讓人x1
的型,即byte
。
以上是以位移位計算結果的差異的詳細內容。更多資訊請關注PHP中文網其他相關文章!