实例十:n的相反数

方法:result=(~n)+1

      正数      负数

原数   0000 0011   1111 1111
补码    1111 1100  0000 0010
加一    1111 1011  0000 0011

1、正数
对于正数的相反数来说,补码就是除符号位变为1,其他不变,计算机中 对于一个数字来说存储的都是其补码,负数的补码为符号位不变其他位按位取反,然后将得到的结果+1
而~n+1的过程第一步就是将符号为变为1,变为其相反数原码的情况,然后剩下的过程就是相反数求补码的过程。

2、负数
对于一个负数来说,计算机中存储的是其补码,而补码的补码是原码,
而~n+1就是先将负数的补码,变成原码,这个时候在将符号位变为0的过程

总之:
1、对于正数:先改变其符号位,然后在进行补码转换
2、对于负数:先进行补码转换,然后在改变符号位

代码:

int _tmain(int argc, _TCHAR* argv[])
{
  int n,nResult=0;

  cout << "请输入原始的值:";
  cin >> n;

  nResult = (~n)+1;
  cout <<endl<< "结果为:" << nResult;

  system("pause");
  return 0;
};

05-11 15:41