[关闭]
@hhzhhzhhz 2019-10-06T08:14:27.000000Z 字数 404 阅读 367

位运算之非运算(~)


复习过程中,莫名发觉非运算这个一元运算符挺奇妙的,网上也没有详细解释于是~~~

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main() {
  4. int n,m;
  5. while(1) {
  6. cin>>n;
  7. cout<<(~n)<<endl<<endl<<endl;
  8. }
  9. return 0;
  10. }

结果:
此处输入图片的描述

发现每一个结果都是原数字

【大雾】


问:那这是为什么呢?

原理

  1. 这种东西还是要回归到二进制;
    对于n首先以二进制补码形式保存;
    eg1: 2 -> 0 000 0010
    eg2: -2 -> 1 111 1110
  2. 非运算即取反操作:对二进制补码连符号位一起取反后再次以补码形式保存
    eg1: 0000 0010 -> 1111 1101 -> 1000 0011=-3
    eg2: 1111 1110 -> 0000 0001 -> 0000 0001=1(正数的补码是自己本身)

就是这样于是~(取反这一神奇的操作就完成了)【跑】


添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注