左程云视频笔记01位运算

位运算

#include <iostream>
using namespace std;
void print(int num)
{
    for (int i = 31; i >= 0; i--)
    {
        //int有32位进制        0000 0000 0000 0000 0000 0000 0000 0000
        //当i为31时,1<<到31位,1000 0000 0000 0000 0000 0000 0000 0000, 
        //<<左移运算符把数字左移到几位,"<<"左边是要移动的数字,"<<"右边是要移动的距离
        //num在机器中是以二进制表示,与(1<<i) &运算。
        // 比如最高位是0,与1 &运算为0, 0==0 则输出0,
        cout << ((num & (1 << i)) == 0 ? "0" : "1") <<" ";
       
    }
    cout << endl;
}
void test01()
{
    //32位 
    //int num = 100;

    //print(num);

    //print(num << 1);
    //print(num << 2);
    //print(num << 4);

    //int b = 1241344;
    取反
    //int c = ~b;

    //print(b);
    //print(c);

    //cout << INT_MIN << endl;
    //cout << INT_MAX << endl;


    int ddd = 1241354;
    int eee = 1516161666;
    print(ddd);
    print(eee);
    cout << "------------------------" << endl;
    //或运算符,11为1,10为,01为1,00为0
    print(ddd|eee);

    //与运算11为1,10为0,01为0,00为0
    print(ddd & eee);

    //异或运算,11为0,00为0,10为1,01为1
    print(ddd ^ eee);
  
  //求值相反,两种方法
    int mun1 = 5;
    //"-"在底层的算术逻辑就是~+1, 负数和正数的在计算机底层的表示形式是不一样的,
    //负数符号位是1,而正数的符号位是0,用~+1来计算的话,正负都能计算出正确的结果
    //0的负数还是0,当~+1后,最高位进1,值溢出,抛弃,除非是long,那么值就不一样了
    int num2 = -mun1;
    cout << num2 << endl;

    int nun2 = 5;
    cout << ~nun2 + 1 << endl;
}
int main()
{
    test01();
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值