推荐答案
测试一下
题目
16bit有符号数0×C6的十进制数是()
A.-57
B.-56
C.-59
D.-58
参考答案与知识点
参考答案
正确答案是D.-58。
解析:本题考察有符号数的补码表示及进制转换。题目中给出的16bit有符号数0xC6实际上是一个简写,在16位宽度下,0xC6应被理解为16进制数,但其只有两个十六进制位,因此需要明确其实际位宽表示。通常,对于有符号数,如果给出的数值最高位为1(二进制11000110,最高位即第7位为1),则表示这是一个负数。在16位有符号数中,进行符号扩展后,0xC6对应的完整16位二进制为1111111111000110(即0xFFC6)。
补码转十进制的方法:对于负数,先求其补码的绝对值的补码。具体步骤:0xFFC6的补码形式,先取反得到0x0039(0000 0000 0011 1001),再加1得到0x003A(0000 0000 0011 1010),即十进制58,因此原数值为-58。另一种简便计算:0xC6即11000110,作为8位有符号数时,其值为-(256-198)=-58,扩展到16位后值不变。
易错点:1. 容易忽略有符号数的符号扩展,错误地将0xC6当作0x00C6(正数198)处理;2. 混淆补码与无符号数的转换,直接按无符号数计算得198;3. 在计算负数补码时,忘记取反加一的过程,或搞错符号。
选项验证:A.-57(对应0xC7)、B.-56(对应0xC8)、C.-59(对应0xC5)、D.-58(对应0xC6)。因此只有D正确。
涉及知识点
- 有符号数的补码表示
- 符号扩展规则
- 十六进制转十进制(补码负数)
- 补码求原码的取反加一方法
- 有符号数与无符号数的区别