16进制0xFFF1和-0x800F怎么转换成10进制?? 8进制0177501和-0227怎么转换成10进制???

如题所述

第1个回答  2011-03-07
转10进制,负数取补码。
第2个回答  2011-03-08
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 取反本回答被网友采纳