0xFFF1 表示的 是 無符號數 還是 有符號數,16位還是32位?
16位 有符號數 則為補碼。
32位 或 16位 無符號數 = F*16^3 + F * 16^2 + F * 16^1 + 1 * 16^0
用C 語言:
printf("%d %u\n",(short) 0xfff1, (unsigned short) 0xfff1); // 一個有符號,另一個無符號
-0x800F 需要明確 減去的 是 16位還是32位,無符號數 還是 有符號數補碼,
先計算
printf("%d %u\n",(short) 0x800f, (unsigned short) 0x800f);
無符號數 = 8 * 16^3 + F
再考慮符號。
8進位制 也同樣需要明確 16位還是32位,無符號數 還是 有符號數。
無符號數 1*8^5 + 7 * 8^4 + 7 * 8^3 + 5 * 8^2 + 0 * 8^1 + 1
用C 語言: printf("%d %u\n",(short) 0177501, (unsigned short) 0177501);
------
記住,計算機內 負數用補碼錶示。負數的補碼是按2進位制, 不計符號位 取各位的反碼 再加 1。
從 補碼 找原碼:減1 取反
0xFFF1 表示的 是 無符號數 還是 有符號數,16位還是32位?
16位 有符號數 則為補碼。
32位 或 16位 無符號數 = F*16^3 + F * 16^2 + F * 16^1 + 1 * 16^0
用C 語言:
printf("%d %u\n",(short) 0xfff1, (unsigned short) 0xfff1); // 一個有符號,另一個無符號
-0x800F 需要明確 減去的 是 16位還是32位,無符號數 還是 有符號數補碼,
先計算
printf("%d %u\n",(short) 0x800f, (unsigned short) 0x800f);
無符號數 = 8 * 16^3 + F
再考慮符號。
8進位制 也同樣需要明確 16位還是32位,無符號數 還是 有符號數。
無符號數 1*8^5 + 7 * 8^4 + 7 * 8^3 + 5 * 8^2 + 0 * 8^1 + 1
用C 語言: printf("%d %u\n",(short) 0177501, (unsigned short) 0177501);
------
記住,計算機內 負數用補碼錶示。負數的補碼是按2進位制, 不計符號位 取各位的反碼 再加 1。
從 補碼 找原碼:減1 取反