位运算------按位与、按位或、按位异或、取反、<<、>>、>>>
程序中的所有数在计算机内存中都是以二进制的形式储存的,位运算就是直接对整数在内存中的二进制位进行操作。
知识点:
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
位运算------按位与、按位或、按位异或、取反、<<、>>、>>>的更多相关文章
- 位操作符:&位与、|位或、^异或、~求反、<<左移位、>>带符号右移位、>>>无符号右移位
. 操作符 名称 实例(例中使用字节) 描述 & 位与 10101110 & 10010010 得到10000010 两个相应位上比特如果都为1,则执行 与 操作会得到1 | 位或 1 ...
- js中的位运算
按位运算符是把操作数看作一系列单独的位,而不是一个数字值.所以在这之前,不得不提到什么是"位": 数值或字符在内存内都是被存储为0和 1的序列,每个0和1被称之为1个位,比如说10 ...
- C语言:位运算
所谓位运算,就是对一个比特(Bit)位进行操作.在<数据在内存中的存储>一节中讲到,比特(Bit)是一个电子元器件,8个比特构成一个字节(Byte),它已经是粒度最小的可操作单元了.C语言 ...
- 简简单单学会C#位运算
一.理解位运算 要学会位运算,首先要清楚什么是位运算?程序中的所有内容在计算机内存中都是以二进制的形式储存的(即:0或1),位运算就是直接对在内存中的二进制数的每位进行运算操作 二.理解数字进制 上面 ...
- C语言回顾-函数和位运算
1.函数的概述 功能独立的代码块 C语言由若干函数组成 1)从定义分,库函数和用户定义函数两种 2)从返回值分,有返回值函数和无返回值函数 3)从参数分,无参函数和有参函数 2.形参和实参 1)形参定 ...
- JAVA:二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题(5)
一.二进制,位运算,移位运算 1.二进制 对于原码, 反码, 补码而言, 需要注意以下几点: (1).Java中没有无符号数, 换言之, Java中的数都是有符号的; (2).二进制的最高位是符号位, ...
- Java学习第五篇:二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题
一.二进制,位运算,移位运算 1.二进制 对于原码, 反码, 补码而言, 需要注意以下几点: (1).Java中没有无符号数, 换言之, Java中的数都是有符号的; (2).二进制的最高位是符号位, ...
- Python语言中的按位运算
(转)位操作是程序设计中对位模式或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多. 在现代架构中, 情况并非如此:位运算的运算速度通常与加 ...
- Java编程的逻辑 (4) - 整数的二进制表示与位运算
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...
随机推荐
- 涂抹mysql笔记-mysql性能调优和诊断
<>关键性指标1.IOPS(Input/Output operations Per Second)每秒处理的I/O请求次数:需要说明的一点,通常提到磁盘读写能力,比如形容它每秒读300M写 ...
- python网页爬虫开发之四-串行爬虫代码示例
实现功能:代理.限速.深度.反爬 import re import queue import urllib.parse import urllib.robotparser import time fr ...
- spring 入门demo
相关资源 官网地址:http://projects.spring.io/spring-boot/ 创建maven项目 勾选箭头处,创建一个简单的项目 填写groupId和artifactId,点击确 ...
- Linux实操篇 vi和vim编辑器
vi和vim的基本介绍 所有的Linux系统都会内建vi文本编辑器. vim具有程序编辑的能力,可以看做是vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计.代码补完.编译及错误跳转等 ...
- Web框架本质及第一个Django实例 Web框架
Web框架本质及第一个Django实例 Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web ...
- css实现文本超出部分省略号显示
一般超出文本显示分为两种:单行超出文本和多行超出文本省略号显示,实现方式使用纯css实现: div { // 单行 white-space: nowrap; overflow: hidden; tex ...
- 尚硅谷springboot学习31-jdbc数据连接
可以使用JdbcTemplate操作数据库,可以在启动的时候自动建表,更新数据表 配置依赖 <dependency> <groupId>org.springframework. ...
- Django_Form验证(三)字段,字段的参数,widgets种类
Form工具是一个很强大的工具,所以他的功能不仅仅是上面2个例子,这里详细记录一下Form的其他功能 字段的一般参数,以CharFields为列子: user=fields.CharField( re ...
- SQLLDR导入乱码问题的解决
SQLLDR导入乱码问题的解决 处理过程: 1.本地建立控制文件 load data infile 'd:\TMP_KAITOUSHUJU.csv' into table TMP_KAITOU ...
- 初学c# -- 纯属无聊,写下棋
纯属无聊了,会下的棋都做了. 象棋围棋修改用法都一样. 1.先启动服务端 goServer.exe服务端:地址为IPAddress[] addrIP = Dns.GetHostAddresses(&q ...