位运算符

作者: GSChan | 来源:发表于2016-10-01 10:48 被阅读53次

    1.什么是位运算符?

    位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。 C语言􏰀供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的 char,short,int与long类型。

    2.位运算符与 - & 按位与

        只有对应的两个二进位均为1时,结果位才为1,否则为0

        口诀: 同1为1

    9&5 = 1

       1001

    &0101

    ------

      0001

        规律

            二进制中,与1相&就保持原位,与0相&就为0

        应用场景:

            按位与运算通常用来对某些位清0或保留某些位。例如把a的高位都清0,保留低八位,那么就a&255

            判断奇偶: 将变量a与1做位与运算,若结果是1,则 a是奇数;若结果是0,则 a是偶数

            任何数和1进行&操作,得到这个数的最低位

        1001

    & 0001

    ------------

        0001

    + 想把某一位置0

         11111111

    &  11111011

    ------------

        11111011


    3.位运算符或  | 按位或

        只要对应的二个二进位有一个为1时,结果位就为1,否则为0

    9^5 = 12

      1001

    ^0101

    ------

      1100

        规律

        相同整数相^的结果是0。比如5^5=0


    4.位运算符取反  ~ 取反

        各二进位进行取反(0变1,1变0)

        多个整数相^的结果跟顺序无关。比如5^6^7=5^7^6

        因此得出结论:a^b^a = b

    ~9 =-10

    9的原码:0000 0000 0000 0000 0000 1001

    反码:1111 1111 1111 1111 1111 0110

    知道补码求原码:也是符号位不变,其他各位取反+1

    1111 1111 1111 1111 1111 0110

    取反

    1000 0000 0000 0000 0000 1001

    +1

    1000 0000 0000 0000 0000 1010 // -10


    5.左移位运算符

        把整数a的各二进位全部左移n位,高位丢弃,低位补0。左移n位其实就是乘以2的n次方

            由于左移是丢弃最高位,0补最低位,所以符号位也会被丢弃,左移出来的结果值可能会改变正负性

    2<<1; //相当于 2 *= 2 // 4

    2<<2; //相当于 2 *= 2^2; // 8

        应用场景

            快速计算一个数乘以2的n次方


    6.右移位运算符

        把整数a的各二进位全部右移n位,保持符号位不变。右移n位其实就是除以2的n次方

            为正数时, 符号位为0,最高位补0

            为负数时,符号位为1,最高位是补0或是补1

            取决于编译系统的规定

    2>>1; //相当于 2 /= 2 // 1

    4>>2; //相当于 4 /= 2^2 // 1

        应用场景

            快速计算一个数除以2的n次方

    相关文章

      网友评论

        本文标题:位运算符

        本文链接:https://www.haomeiwen.com/subject/ddpryttx.html