zoukankan      html  css  js  c++  java
  • 位运算符

    最近又看了下位运算符的内容,自己再次消化后,决定还是记录下来,万一以后再忘了直接看自己的,省的再满世界的去找了。。。

    我自己了解到的按位运算符有6个,分别是:

    • & 按位与
    • | 按位或
    • ^ 按位异或
    • >> 右移
    • << 左移
    • >>> 无符号右移
    • ~ 按位非

    1、&(按位与):任何二进制位与0进行 & 计算,结果都是0;和1进行&计算,结果是原值。即:二进制位都是1时,进行 & 计算结果是1,其他情况计算结果都是0

      如:6的二进制是:000110,5的二进制是:000101,6 & 5 = 000110 & 000101 = 000100 = 4

    2、|(按位或):任何二进制位与0进行 | 计算,结果是原值;和1进行 | 计算,结果都是1。即:二进制位都是0时,进行 | 计算结果是0,其他情况计算结果都是1

      如:6的二进制是:000110,5的二进制是:000101,6 | 5 = 000110 | 000101 = 000111 = 7

    3、^(按位异或):任何相同的二进制位进行 ^ 计算,结果是0;不相同的二进制位进行 ^ 计算,结果是1。

      如:6的二进制是:000110,5的二进制是:000101,6 ^ 5 = 000110 ^ 000101 = 000011 = 3

    4、>>(右移):二进制从低位进行移除并将剩余的向移动,原先最高位是1补1,是0补0,其它空位补0。右移n位,实现效果等同于除以2的n幂次方

      如:8的二进制是:001000,8 ÷ 2= 8  >> 3 = 001000 = 000001 = 1

    5、<<(左移): 二进制从高位进行移除并将剩余的向移动,原先最高位是1补1,是0补0,其它空位补0。左移n位,实现效果等同于乘以2的n幂次方

      如:8的二进制是:001000,1 × 2= 1 << 3 = 000001 = 001000 = 8

    6、>>>(无符号右移):二进制从低位进行移除并向右移动,不管原先最高位是1还是0,和其它空位一样补0。对于正数,无符号右移等同于右移,但是如果还是负数进行无符号右移,会出现计算问题。因为二进制最高位是作为符号位来保存的,正数最高位为0,负数最高位为1,而且负数的二进制计算和正数的二进制计算是相反的(即-1的二进制位数值都是1),你品品,你细品。

      如:int类型(32位)-1的二进制是:11111111111111111111111111111111,-1 >>> 1 = 11111111111111111111111111111111 = 01111111111111111111111111111111 = 231 - 1 = 2147483647,

      int类型的(32位)-2的二进制是:11111111111111111111111111111110,-2 >>> 1 = 1111111111111111111111111111111001111111111111111111111111111111 =  231 - 1 = 2147483647

      int类型的(32位)-3的二进制是:11111111111111111111111111111101,-3 >>> 1 = 11111111111111111111111111111101 = 01111111111111111111111111111110 =  230 = 2147483646

    7、~(按位非):二进制位进行非运算(~),位是1的结果为0,位是0的结果为1

      如:int类型(32位)-1的二进制是:11111111111111111111111111111111,~-1 = ~(11111111111111111111111111111111) = 0000000000000000000000000000 = 0

      int类型(32位)1的二进制是:00000000000000000000000000000001,~1 = ~(00000000000000000000000000000001) = 11111111111111111111111111111110= -2

  • 相关阅读:
    珍珠项链——容斥的应用
    协程库中 WaitGroup / CountDownLatch 实现
    简单C++线程池
    switch 比 if/else 效率更高?
    [LeetCode 264.] 丑数 II
    [LeetCode 229.] 求众数 II
    [NC41] 最长无重复子数组
    [NC105] 二分查找-II
    高楼扔鸡蛋
    C++ 编译期计算
  • 原文地址:https://www.cnblogs.com/zzw-blog/p/12449924.html
Copyright © 2011-2022 走看看