• 位运算符讲解


    目录

                                                    与(&)

                                                    或(|)

                                                    非(~)

                                                    异或(^)

                                                    移位运算符

                    ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        1.>> 右移 

                    ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​ 2.<<左移


    最近接触了位运算符,我认为位运算符在一些题中的使用是很巧妙得,而且它也是算是一个入门算法。

    位运算符有,异或移位运算符

    位运算符实际是采取二进制进行运算,

                                                    与(&)

                 两个二进制操作数对应位同为1 结果位 才为1,其余情况为0;

       10进制数        15            二进制    00001111

                              14                          00001110

    15&14=  14(00001110)

    1. # include <stdio.h>
    2. int main()
    3. {
    4. printf("%d",14&15);
    5. return 0;
    6. }

                                                    或(|)

                      两个二进制操作数对应位只要有一个为1 结果位 就为1,其余情况为0

     10进制数        15            二进制    00001111

                            14                           00001110

    15|14=15(00001111)

    1. # include <stdio.h>
    2. int main()
    3. {
    4. printf("%d",14|15);
    5. return 0;
    6. }

                                              非(~)

                  一个二进制操作数,对应位为0,结果位为1;对应位为1,结果位为0;

    取反后得到的是原码   而进行存储时是存储的补码,得到补码的过程要先得到反码

     10进制数       8           二进制    0000 1000

          (~8)=-9(1000 1001)

       取反后原码:1111 0111

       取反后反码:1000 1000(除了符号位 其余位都进行取反操作)

       取反后补码:1000 1001  补码(因为为负数所以加一) 如果为正数不需要进行加一 

                 

    1. # include <stdio.h>
    2. int main()
    3. {
    4. printf("%d",~15);
    5. return 0;
    6. //00001000
    7. //11110111 取反原码
    8. //10001000 取反反码
    9. //10001001 补码(因为为负数所以加一)
    10. }

                                                       异或(^)

                同为假,异为真

    10进制数        15            二进制    00001111

                            14                           00001110

    15^14=1(0000001)

    1. # include <stdio.h>
    2. int main()
    3. {
    4. printf("%d",14^15);
    5. return 0;
    6. }

                             移位运算符

    1.>> 右移 

     按二进制形式把所有的数字向右移动对应位移位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。(高位用符号位补充-------正数右移还是正数    负数右移还是负数)

    语法:需要移位的数字number >> 移位的次数

    13>>2=3

    13的二进制位(1101)向右移动两位变成3(11)

    性质(在整数下):右移相当于用该数除以2的移位次数再向下取整

    13/(2^2)向下取整为3

    2.<<左移

    将一个数的二进制同时往左移位,低位用0补充

    5<<1=10

    5(101)向右移动1位 (1010)=10、

    性质同上右移

    是5*2^1=10

  • 相关阅读:
    mysql安装完全排坑指南
    【网络编程】TCP Socket编程
    若依框架学习笔记
    正则替换【JS,正则表达式】
    Vim - Linux环境基础开发工具使用
    QtConcurrent使用成员函数:QT5&QT6(老写法报错)的区别
    [JavaEE系列] Thread类的基本用法
    Qemu系统模拟:1 简介
    Flink JobManager的高可用配置
    Docker 及 Docker Compose 安装指南
  • 原文地址:https://blog.csdn.net/m0_61469860/article/details/122396538