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

知识点:

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. CentOs安装Scrapy出现error: Setup script exited with error: command ‘gcc’ failed with exit status 1错误解决方案
  2. 第六届acm省赛总结(退役贴)
  3. php--yii框架中的ajax分页与yii框架自带的分页
  4. Android 微信分享图文资料
  5. 访问修饰符private
  6. Tiling_easy version(填2 x N的格子的种类)
  7. c语言string.h和memory.h某些函数重复问题
  8. android ScrollView--Linearlayout可以上下拖动
  9. [iOS]C语言技术视频-08-结构体的定义
  10. Django创建模板、URL模式、创建视图函数
  11. Spring Boot-------项目搭建及注解
  12. strut2接收参数的三种方式
  13. 使用SQL语句查询表及表字段类型说明
  14. Rime 小狼毫 注意事项
  15. [多线程]wait和notify
  16. 担心后端代码泄露?用delphi做后端,模板扣出来,随时可以变化。
  17. 微信小程序与Vue js数据渲染对比
  18. apt 下载安装包
  19. 硬盘分区表知识—详解硬盘MBR
  20. Linux wget安装详解

热门文章

  1. MOBA英雄AI设计分享
  2. beautifulSoup《转》
  3. FPGA editor 的使用之一 ------ Probe探针
  4. volatile适用场景之二
  5. [UnityShader基础]03.透明度混合
  6. SpringBoot 之热部署
  7. 配置yum源
  8. 远程桌面 把explorer关掉了
  9. 吴裕雄 python深度学习与实践(14)
  10. 微信小程序 验证码倒计时组件