程序中的所有数在计算机内存中都是以二进制的形式储存的,位运算就是直接对整数在内存中的二进制位进行操作。

知识点:

1、原码、反码、补码(以byte的1、-1举例)

示例                    1                      -1

原码        0000 0001          1000 0001     ------>第一位是符号位,0是正数,1为负数

反码        0000 0001          1111 1110       ------>正数反码是其自身,负数则符号位不变,其他位置全部取反

补码        0000 0001          1111 1111       ------->正数补码是其自身,负数则为反码+1

当然也可以从1通过取反,然后+1的方式得到-1的补码

2、补码:用于将十进制的负整数转换为二进制数。十进制的正整数可以除以2取余,负整数则需要补码。

补码的流程:例如-10

  10:0000 0000 0000 1010

取反:1111 1111   1111  0101

+1

-10:1111  1111  1111  0110

3、整数在内存中以补码存在。

一、按位与(&)

定义:如果两个相应的二进制位都为1,则该位的结果值为1,否则为0.

示例:

1、10与-10 &运算

10:0000 0000 0000 1010     ----->   十进制转二进制

-10:1111  1111  1111  0110     ----->   -10就是10取反,然后+1(补码)

结果: 0000 0000 0000 0010     ----->   结果为2

二、按位或(|)

定义:如果两个相应的二进制位有一个为1,则该结果为1,否则为0.

示例:

1、10与-10 |运算

10:0000 0000 0000 1010

-10:1111  1111  1111  0110

结果: 1111  1111 1111   1110  ----->结果-2

第一位为符号位,1代表是负数,因此是补码形式存在,补码-->十进制。先取反(符号位不变),+1。

1000 0000 0000 0001

+1

1000 0000 0000 0010 ------> -2

三、按位异或(^)

定义:如果两个相应的二进制位值不同则为1,否则为0

示例:

1、10与-10 ^运算

10:0000 0000 0000 1010

-10:1111  1111  1111  0110

结果: 1111  1111 1111   1100  ------> 结果-4

四、取反(~)

定义:用来对一个二进制按位取反。

示例:

1、10取反

10:0000 0000 0000 1010

结果: 1111  1111 1111  0101 ------> 结果-11

五、左移(<<)

定义:将一个数的各二进制位全部左移N位,右补0

示例:

1、10左移<<2

10:0000 0000 0000 1010

结果: 0000 0000 0010 1000------> 结果40

六、右移(>>)

定义:将一个数的各二进制位全部右移N位,移到右边的低位被舍弃,对于无符号数高位补0,负数高位补1.

1、10右移>>2

10:0000 0000 0000 1010

结果: 0000 0000 0000 0010------> 结果2

2、-10右移>>2

-10:1111  1111  1111  0110

结果: 1111  1111 1111   1101

取反,符号位不变

1000 0000 0000 0010

+1

1000 0000 0000 0011

结果:-3

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

定义:将一个数的各二进制位全部右移N位,移到右边的低位被舍弃,对于无符号数高位补0,只是对32位和64位的值有意义。

示例:

1、-10>>>2

-10:1111 1111 1111 1111 1111  1111  1111  0110  ------->由于>>>只对32和64位有意义,所以把-10定义成32位的

结果: 0011  1111 1111 1111 1111 1111 1111 1101

取反(符号位不变)

0100 0000 0000 0000 0000 0000 0000 0010

+1

0100 0000 0000 0000 0000 0000 0000 0011

位运算------按位与、按位或、按位异或、取反、<<、>>、>>>的更多相关文章

  1. 位操作符:&位与、|位或、^异或、~求反、<<左移位、>>带符号右移位、>>>无符号右移位

    . 操作符 名称 实例(例中使用字节) 描述 & 位与 10101110 & 10010010 得到10000010 两个相应位上比特如果都为1,则执行 与 操作会得到1 | 位或 1 ...

  2. js中的位运算

    按位运算符是把操作数看作一系列单独的位,而不是一个数字值.所以在这之前,不得不提到什么是"位": 数值或字符在内存内都是被存储为0和 1的序列,每个0和1被称之为1个位,比如说10 ...

  3. C语言:位运算

    所谓位运算,就是对一个比特(Bit)位进行操作.在<数据在内存中的存储>一节中讲到,比特(Bit)是一个电子元器件,8个比特构成一个字节(Byte),它已经是粒度最小的可操作单元了.C语言 ...

  4. 简简单单学会C#位运算

    一.理解位运算 要学会位运算,首先要清楚什么是位运算?程序中的所有内容在计算机内存中都是以二进制的形式储存的(即:0或1),位运算就是直接对在内存中的二进制数的每位进行运算操作 二.理解数字进制 上面 ...

  5. C语言回顾-函数和位运算

    1.函数的概述 功能独立的代码块 C语言由若干函数组成 1)从定义分,库函数和用户定义函数两种 2)从返回值分,有返回值函数和无返回值函数 3)从参数分,无参函数和有参函数 2.形参和实参 1)形参定 ...

  6. JAVA:二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题(5)

    一.二进制,位运算,移位运算 1.二进制 对于原码, 反码, 补码而言, 需要注意以下几点: (1).Java中没有无符号数, 换言之, Java中的数都是有符号的; (2).二进制的最高位是符号位, ...

  7. Java学习第五篇:二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题

    一.二进制,位运算,移位运算 1.二进制 对于原码, 反码, 补码而言, 需要注意以下几点: (1).Java中没有无符号数, 换言之, Java中的数都是有符号的; (2).二进制的最高位是符号位, ...

  8. Python语言中的按位运算

    (转)位操作是程序设计中对位模式或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多. 在现代架构中, 情况并非如此:位运算的运算速度通常与加 ...

  9. Java编程的逻辑 (4) - 整数的二进制表示与位运算

    ​本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...

随机推荐

  1. CentOS安装mysql源码包

    1.# cd /usr/local/src 2.上传mysql.tar.gz文件 3.# tar -zxvf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz 4.# ...

  2. windows:plsql配置oracle连接

    1.plsql安装 此处省略,后续添加 2.plsql连接oracle: (1) 下载Instant client:http://www.oracle.com/technetwork/cn/topic ...

  3. jquery中live is not a function的问题

    jquery中的live()方法在jquery1.9及以上的版本中已被废弃了,如果使用,会抛出TypeError: $(...).live is not a function错误. 解决方法: 之前的 ...

  4. ORM对象关系映射

    ORM 总结: ORM:对象关系映射 作用: 1.将定义数据库模型类--> 数据库表 2.将定义数据库模型类中的属性--->数据库表字段 3.将模型对象的操作(add,delete,com ...

  5. python:选房抽签小工具

    1.房间号和姓名写在house_name.xls的house标签页中[注意!名字均不要改动]2.运行house.py3.当前同目录下会生成result.xls,即为结果:程序运行过程中不要打开该文件, ...

  6. ActiveMQ(2)---ActiveMQ原理分析之消息发送

    持久化消息和非持久化消息的发送策略 消息同步发送和异步发送 ActiveMQ支持同步.异步两种发送模式将消息发送到broker上.同步发送过程中,发送者发送一条消息会阻塞直到broker反馈一个确认消 ...

  7. python大法好——装饰器、生成器、迭代器

    1.装饰器 1. 不能修改被装饰的函数的源代码  2. 不能修改被装饰的函数的调用方式 实现装饰器知识储备: 1 函数即“变量” 2 高阶函数     a:把一个函数名当做实参传给另外一个函数(不修改 ...

  8. The history of programming languages.(transshipment) + Personal understanding and prediction

    To finish this week's homework that introduce the history of programming languages , I surf the inte ...

  9. 剑指offer例题——二进制中1的个数

    题目:输入一个整数,输出该二进制表示中1的个数.其中负数用补码表示. 首先明确补码的定义: 原码 反码 补码 将最高位作为符号位(0表示正,1表示负), 其它数字位表达数值本身的绝对值的数字表示方式 ...

  10. java学习笔记(一):开始第一个java项目

    这里使用IntelliJ IDEA 来新建第一个java项目 在新建项目向导,你可以选择你的项目支持的技术,你正在做一个普通的Java项目,只需单击下一步. 下一步,新建一个test的项目. 新建一个 ...