int8_t a = -1; uint32_t b = a; b = ?
這要用到整型轉換規則, C Programming Language(K & R) (A.6.2)上這樣解釋:ui
將任何整數轉換爲某種指定的無符號數類型數的方法是:以該無符號數類型可以表示的最大值加1爲模,找出與此整數同餘的最小的非負值。
在對二的補碼錶示中,若是該無符號類型的位模式較窄,這就至關於左截取;若是該符號類型的位模式較寬,這就至關於對帶符號的值進行符號擴展和對無符號的值進行0填充。code
將任何整數轉換爲帶符號類型時,若是它能夠在新的類型中表示出來,則其值保持不變,不然它的值同具體的實現有關。變量
其中以該無符號數類型可以表示的最大值加1爲模,找出與此整數同餘的最小的非負值
,我以爲太拗口,下面那段才比較好理解在對二的補碼錶示中,若是該無符號類型的位模式較窄,這就至關於左截取;若是該符號類型的位模式較寬,這就至關於對帶符號的值進行符號擴展和對無符號的值進行0填充。
擴展
好比把 0x1234 放到一個 uint8_t 類型變量 x 中,那麼高 8 位就被截掉,低 8 位被放到變量中,最終 x 的值爲 0x34。
好比把 -1 放到 x 中,由於 -1 的二進制碼是 0xFFFFFFFF,那麼 x 的值就等於 0xFF。二進制