• 【计算机基础-二进制位运算】



    位运算的基础是使用数值的补码进行计算。

    一、与(&)

    1. 按位与;
    2. 参与运算的两个数对应的二进制位相与,只有对应的二进制位均为1时,结果的对应为才为1,否则为0;
    3. 9&5相当于00001001&00000101,运算结果为00000001.输出结果是1。
    4. 9&-5相当于00001001&11111011,运算结果为00001001.输出结果是9。

    二、或(|)

    1. 按位或;
    2. 把参数运算的两个数对应的二进制位相或,只要对应的两个二进制位有一个为1时,其结果就为1;
    3. 9|5相当于00001001|00000101,运算结果为00001101.输出结果是13。
    4. 9|-5相当于00001001|11111011,运算结果为11111011.负数要还原原码10000101,输出结果是-5。

    三、按位异或(^)

    1. 按位异或;
    2. 把参数运算的两个数对应的二进制位相异或,对应位上的两个二进制数字不同时,结果为1,否则为0;
    3. 任何数和 00 做异或运算,结果仍然是原来的数;
    4. 任何数和其自身做异或运算,结果是 0;
    5. 异或运算满足交换律和结合律;
    6. 9^5相当于00001001^00000101,运算结果为00001100.输出结果是12。
    7. 9^-5相当于00001001^11111011,运算结果为11110010.负数要还原原码10001110,输出结果是-14。

    四、取反(~)

    1. 按位异或;
    2. 把参数运算的两个数对应的二进制位相异或,对应位上的两个二进制数字不同时,结果为1,否则为0
    3. ~5相当于~00000101,运算结果为11111010.负数要还原原码10000110.输出结果是-6。
    4. ~-5相当于~11111011,运算结果为00000100,输出结果是4。

    五、左移(<<)

    1. 左移;
    2. m<<n是指把m对应的二进制数的各个二进制位向左移n位,高位丢弃,低位用0补齐;
    3. 3<<3相当于00000011左移三位,运算结果为00011000.输出结果是24。
    4. -3<<3相当于11111101左移三位,运算结果为11101000,原码为10011000输出结果是-24。

    六、右移(>>)

    1. 右移;
    2. m>>n是指把m对应的二进制数的各个二进制位向右移n位,低位丢弃,高位根据符号,正数用0补齐;负数用1补齐。
    3. 3>>1相当于00000011右移一位,运算结果为00000001.输出结果是1。
    4. -3>>1相当于11111101右移三位,运算结果为11111111,原码为10000001输出结果是-1。

    七、无符号右移(>>>)

    1. 无符号右移;
    2. m>>>n是指把m对应的二进制数的各二进制位向右移n位,低位丢弃,高位用0补齐。。
    3. 3>>>1相当于00000011右移一位,运算结果为00000001.输出结果是1。
    4. 负数无符号右移会变成正值,
    5. 按照32位int计算-3>>>3得到结果11111111 11111111 11111111 11111101转为00011111 11111111 11111111 11111111
  • 相关阅读:
    代码坏味道(一)
    【Rust日报】2022-06-22 Rust 连续第 7 年成为最受喜爱的语言
    学Golang,看这一篇
    将一个字符串str的内容颠倒(逆序)过来,并输出
    python工具方法 45 基于ffmpeg以面向对象多线程的方式实现实时推流
    从源码看vue(v3.2.41)中的diff原理
    企业子网划分详解
    联邦学习综述
    战备器材管理系统-部队物资仓库管理系统
    【Openxml】颜色变化属性计算
  • 原文地址:https://blog.csdn.net/qq_43479628/article/details/125618537