永发信息网

c++补码运算

答案:2  悬赏:20  手机版
解决时间 2021-03-04 10:59
  • 提问者网友:太高姿态
  • 2021-03-04 00:40
#include<iostream>#include<cstring>using namespace std;int main(){ int a; a=~10+1; cout<<a; return 0;}
为什么输出-10?
最佳答案
  • 五星知识达人网友:不如潦草
  • 2021-03-04 01:54
int a 是带符号数;由编译器的不同,可能是2字节编码(short int)或4字节(long int);
以2字节编码为例来解释一下:10 = 0000 0000 0000 1010B (注1) ; ~是取反码(按位),所以
~10 = 1111 1111 1111 0101B 于是 ~10+1 = 1111 1111 1111 0110B (注2)这恰好是-10的补码表示,所以输出-10;
要验证这个问题,其实就是把上面10 和-10的编码(分别为注解1,2)相加。在有字长确定的情况下,相加后,最高位的进位被“自然”丢失,于是,结果为0。
补码实际是在有限字长的条件下,允许一对非0的数相加,其和为0。满足该条件的一对数,是有限字长条件下的互为相反数。
全部回答
  • 1楼网友:人间朝暮
  • 2021-03-04 02:02
分两种情况,以八位原码转换为例: 正数(符号位为0的数)补码与原码相同. 负数(符号位为1的数)变为补码时符号位不变,其余各项取反,最后在末尾+1 例如:原码01100110,补码为:01100110 原码
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯