c语言。帮我解释下(3)的意思,半懂半不懂的。用个实际的例子解释下
发布网友
发布时间:2022-07-14 07:44
我来回答
共2个回答
热心网友
时间:2023-09-19 12:22
比如:
正整数:8位二进制有符号数表示的十进制数10为00001010,其中最高位是符号位,因为是正数所以取0,当此数扩展成16位(双字节)数据时扩展的方式是,目的16位数据最高位复制原数据最高位符号位,其余的位也复制符号位为00000000 00001010,仍然表示正的十进制数10。
负整数:8位二进制有符号数表示的十进制数-10为11110110,其中最高位是符号位,因为是负数所以取1,当此数扩展成16位数据时扩展的方式是,目的16为数据最高位复制元数据最高位符号位,其余的为也赋值符号位为11111111 11110110,仍然表示负的十进制数-10。
综合以上就是(3)中所述,目的数符号位复制原数据符号位,然后目的数的低位复制原数据低位不变,没有复制对应的位则全部复制符号位,这样无论正、负数据均能正确扩展。好比刚才的例子-10:原数据11110110,要扩展成16位xxxxxxxx 11110110,那么先将符号位左移到最高位1xxxxxxx x1110110剩余的位(x)全部填写符号位数值1:11111111 11110110追问那不就是正数变时补0,负数补1吗
追答对的
热心网友
时间:2023-09-19 12:22
补码
正数: 与原码一致
负数: 符号位不变,其他位取反+1
eg:-1,
4位 8位
原码: 1001 10000001
补码: 1111 11111111
反码: 1110 11111110
原码填0,数和原来一致,不难理解
补码反码必须扩展的必须符号位一样,你可以拿数字演算一下,-1然后除符号位取反,和原来数字一致