作业帮 > 综合 > 作业

c语言、是已知一个负数的补码然后求原码

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/06/04 17:55:38
c语言、是已知一个负数的补码然后求原码
该负数补码为a=1111 1111 1111 1101
a=-[2^16-(a的补码)]
2^16是换算成16位2进制来算还是什么!
对补码求补就原码
故原码:
-((2^16-1)-a+1)
其中2^16-1是二进制数:1111 1111 1111 1111
减a后就是将a全部按位取反(包括最高位)
+1后还得把最高位换为1(在计算机内部为换为1),咱们表示的时候就是取其负值,故前面加一个‘-’
再问: 是不是2^16就是0000 0000 0000 0001 的1向前面进位16个? 然后【补码的优点就是两个相反数相加得到0,如-1:1111 1111 1111 1111; 1: 0000 0000 0000 0001,这里我没看懂、相反数相加为0?,-1:1111 1111 1111 1111;1: 0000 0000 0000 0001。是什么意思、谢谢你解答下噢!
再答: (-1) : 1111 1111 1111 1111 (+1): + 0000 0000 0000 0001 -------------------------------- 1 0000 0000 0000 0000 (-2) 1111 1111 1111 1110 (+2) + 0000 0000 0000 0010 -------------------------------- 1 0000 0000 0000 0000 可见,补码正负数(绝对值相反)相加,得1 0000 0000 0000 0000,这个数就是2^16, 【但数据就是低16位,低16位就是0;实际上,补码运算是不看进位位的】
再问: 这个1 0000 0000 0000 0000 就是啊、a的原码咯?
再答: a=-[2^16-(a的补码)] 这个是 a=1111 1111 1111 1101 2^16-(a的补码)= 0000 0000 0000 0011 a=-【0000 0000 0000 0011】 由于最高位是符号位,所以 a=-【000 0000 0000 0011】 [a]原=1000 0000 0000 0011