撸了N久的代码,但是突然冒出来个位运算,我就蒙蔽了,这是什么?我是谁?我在干什么?我在哪?

1)闲扯

关于位运算符无非也就 与(&)、或(|)、异或(^)、取反(~)、左移(<<)、右移(>>)、无符号右移(>>>)

位运算其实就是二进制的运算,加减乘除适用于十进制,而位运算就是二进制的运算,但是由于我们的运算都是基于十进制来说的,所以会有点绕,略微有点难懂,接下来言归正传

2)关于二进制

我们在编码过程中应该会了解很多不同的进制,除去常用的十进制,还有二进制、八进制、十六进制,因为我们的位运算符主要用到二进制,就只讲讲二进制

几进制就是一个位上最多能表示几个数,如十进制的个位有0~9十个数字,八进制有0~7八个数字,二进制我们自然想到就是0~1两个数字

我们编码中最小的单位应该是字节,而一个字节有8位,每一位就是一个0或1,所以一个字节用二进制表示就是

这样的

3) 与运算符(&)

如果  4&7   那么这个应该怎么运算呢?

首先我们需要把两个十进制的数转换成二进制

4 : 0000 0100

7 : 0000 0111

在这里要提到一点,1表示true,0表示false

而与运算的时候相同位之间其实就是两个Boolean的运算

全true(1),即为true(1)

全false(0),即为false(0)

一false(0)一true(1),还是false(0)

4)或运算符(|)

以   5|9   为例

5 : 0000 0101

9 : 0000 1001

在做与运算的时候

                 遇true(1)就是true(1),

                 无true(1)就是false(0)

 

5) 异或运算符(^)

           以 7^15 为例

           7:   0000 0111

           15: 0000 1111

在异或的时候

只要相同都是false(0)

只有不同才是true(1)

6) 取反运算符(~)

例:   ~15

同样的先变成二进制:15:0000 1111

这个其实挺简单的,就是把1变0,0变1

注意:二进制中,最高位是符号位   1表示负数,0表示正数

7) 左移运算(<<)

      左移就是把所有位向左移动几位

如:   12 << 2    意思就是12向左移动两位

12的二进制是: 0000 1100

通过这个图我们可以看出来,所有的位全都向左移动两位,然后把右边空的两个位用0补上,最左边多出的两个位去掉,最后得到的结果就是00110000  结果就是48

我们用同样的办法算 12<<3  结果是 96

                            8<<4  结果是  128

  由此我们得出一个快速的算法    M << n   其实可以这么算   M << n  = M * 2n

 

8) 右移运算符(>>)

 

这个跟左移运算大体是一样的

     例: 12 >> 2

我们可以看出来右移和左移其实是一样的,但是还是有点不同的,不同点在于对于正数和负数补位的时候补的不一样,负数补1,正数补0

如我们再做一个 –8 的    -8>>2

这里总结一下,关于负数或者正数来说,移位的时候是一样的,但是在补位的时候,如果最高位是0就补0,如果最高位是1就补1

由此我们得出一个快速的算法    M >> n   其实可以这么算   M >> n  = M / 2n

9无符号右移(>>>)

     无符号右移(>>>)只对32位和64位有意义

在移动位的时候与右移运算符的移动方式一样的,区别只在于补位的时候不管是0还是1,都补0

这个就不画图了

Java 位运算符 &、|、^、~、<<、>>、>>>的更多相关文章

  1. Java 位运算符和 int 类型的实现

    Java 位运算符和 int 类型的实现 其他运算符 # 算术运算符 +.-.*./.++i.i++.--i.i-- # 关系运算符 ==.!=.>.<.>=.<= # 逻辑运 ...

  2. 利用Java位运算符,完成Unsigned转换(无符号)

    方案二:利用Java位运算符,完成Unsigned转换. 正常情况下,Java提供的数据类型是有符号signed类型的,可以通过位运算的方式得到它们相对应的无符号值,参见几个方法中的代码: publi ...

  3. 【java提高】(17)---Java 位运算符

    Java 位运算符 &.|.^.~.<<.>> 以前学过有关java的运算符,不过开发了这么久也很少用过这个.现在由于开发需要,所以现在再来回顾整理下有关java的运算 ...

  4. LeetCode刷题笔记(3)Java位运算符与使用按位异或(进制之间的转换)

    1.问题描述 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 算法应该具有线性时间复杂度并且不使用额外空间. 输入: [4,1,2,1,2] 输 ...

  5. Java位运算符、位移运算符;原码、反码、补码

    文章背景:雪花算法 id 生成长度问题. Java位运算符 - 异或运算符(^)<p>运算规则:两个数转为二进制,然后从高位开始比较,如果相同则为0,不相同则为1.</p> - ...

  6. java 位运算符 以及加法 交换两个变量值

    先给出十转二的除法 2       60 30       0 15 0 7 1 3 1 1  1 0  1 60转二 111100 再介绍位运算符 a=60 b=13 A = 0011 1100 B ...

  7. Java位运算符浅析

    在学习源码中,发现有大量使用位运算符,这样做的目的是为了节约内存开销和加快计算效率. 位运算符,这个”位”代表这什么? 位:二进制位简称“位”,是二进制记数系统中表示小于2的整数的符号,一般用1或 0 ...

  8. Java位运算符&、|、^、>>、<<、~、>>>

    如果要搞懂Java中的位运算符,首先要搞懂二进制的运算,之前一篇有介绍详细请看 二进制运算-十进制与二进制的转换 Java中的位运算符有:&(按位与).|(按位或).^(按位异或).>& ...

  9. (九)java位运算符

    位运算符 &(与),|(或),^(异或),~(取反),<<(左移),>>(右移),>>>(无符号右移)         1:为true,0为false ...

随机推荐

  1. C# 统计字符串出现的个数

    string str1 = "123AAA456AAAA789AAAAAAA1011"; string str2 = "123456789AAA23456789AAAA3 ...

  2. day04-交互、格式化输出及基本运算符

    目录 与用户交互 python2和python3交互的区别 格式化输出 1 字符串拼接 2 占位符 3 format格式 4 f-string格式 基本运算符 算术运算符 比较运算符 赋值运算符 逻辑 ...

  3. vue-cli3 中的环境变量

    官方文档是这样写的: src同名文件夹下的建立 .env.[model] 配置文件  // mode:production development ... 载入的变量会对vue-cli-service ...

  4. Bullet:Python的函数中参数是引用吗?

    别的语言中关于函数有传值和传引用的区分. 关于此,流传很广的一个说法是 他们在现象的区别之一就是值传递后的变化,受到影响的就是引用,未受到影响的就是传值.   在学习中,也曾碰到过这个问题,网上关于这 ...

  5. hdu 1584 蜘蛛纸牌

    把小的牌放到大的牌上,求最小移动的距离和 DFS遍历所有的可能,把每一张牌与之要移动的牌都进行两层for的循环,注意回溯条件满足立刻break 代码(算法借鉴) #include <bits/s ...

  6. Dijkstra算法求最短路径

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <limits.h&g ...

  7. IDEA git commit push revert

    Revert uncommitted changes You can always undo the changes you've done locally before you have commi ...

  8. sql 语句实现可用户名、邮箱、手机号登录系统

    select top 1 nid from Users where (userName collate Chinese_PRC_CS_AS=@userName or mobile collate Ch ...

  9. hdu 4950

    #include<stdio.h> int main(){ __int64 h,a,b,k,j=0; while(scanf("%I64d%I64d%I64d%I64d" ...

  10. [USACO16OPEN]关闭农场Closing the Farm(洛谷 3144)

    题目描述 Farmer John and his cows are planning to leave town for a long vacation, and so FJ wants to tem ...