当前位置:网站首页>深入理解位运算
深入理解位运算
2022-06-27 13:09:00 【楼下安同学】

什么是进制
进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法,以及类似的tally mark计数)。 对于任何一种进制—X进制,就表示每一位上的数运算时都是逢X进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。
所以说运算的本质是什么呢?我觉得是查数。打破固有的思想,我们把每个数字都看成是符号,这样就有意思多了,我们可以写出自己的进制,可以做自己的运算
进制转换
1、其他进制转十进制
从最低位开始,将每个位上的数提取出来,乘以进制的(位数-1)次方,求和
// 2^n 二进制为:1{n个0} 2^n-1 二进制为:{n个1}
二进制转十进制: 1011 = 1*2^0 + 1*2^1 + 0*2^2 + 1*2^3 = 11
八进制转十进制: 0123 = 3*8^0 + 2*8^1 + 1*8^2 = 83
十六进制转十进制: 0x34A = 10*16^0 + 4*16^1 + 3*16^2 = 786
2、十进制转其他进制
将该数不断除以要转换的进制,知道商为0为止,然后将得到的余数倒过来
十进制转二进制: 56 = 2^5 + 2^4 + 2^3 = 111000
十进制转八进制: 156 = 0234
十进制转十六进制: 256 = 0x164
3、二进制转其他进制
将二进制数每三位一组(从低位开始组合),转成对应的八进制 十六进制时四位
二进制转八进制: 11 010 101 = 0325
二进制转十六进制: 1101 0101 = 0xD5
4、其他进制转二进制
将八进制/十六进制每一位转换成对应的一个3/4位的二进制数即可
八进制转换成二进制: 0123 = 0 001 010 011 = 1010011
十六进制转换成二进制: 0x156 = 0001 0101 0110 = 101010110
原码、反码、补码
- 对于有符号数而言:
- 二进制的最高位是有符号位:0表示正数,1为负数
- 正数的原码、反码、补码都一样
- 0的反码、补码都是0
- 负数的反码 = 它的原码符号位不变,其他位取反
- 负数的补码 = 它的反码+1
- 计算机运算的时候,都是以补码的方式运算的
1 -1
原码 0000 0001 原码 1000 0001
反码 0000 0001 反码 1111 1110
补码 0000 0001 补码 1111 1111
位运算符
| 运算符 | 描述 | 规则 |
|---|---|---|
| & | 按位与 | 同时为1,结果为1,否则为0 |
| | | 按位或 | 有一个为1,结果为1,否则为0 |
| ^ | 按位异或 | 当结果不同时结果为1,否则为0 |
| << | 左移 | 左移N位就是乘以2的N次方 |
| >> | 左移 | 右移N位就是除以2的N次方 |
位运算本质
只要是运算,都是补码!!!运算结束需要转换成源码
// 2补码 3补码
2 & 3 = 0000 0010 & 0000 0011 = 0000 0010 = 2
2 | 3 = 0000 0010 | 0000 0011 = 0000 0011 = 3
2 ^ 3 = 0000 0010 ^ 0000 0011 = 0000 0001 = 1
// -2补码 3补码 结果(补码) -> 推出原码
-2 & 3 = 1111 1110 & 0000 0011 = 0000010 = 2
// 位移运算符 箭头朝向哪就是向哪个方向移
// 右移:低位溢出符号位不变,并用符号位补溢出的高位
// 左移:符号位不变,低位补0
// 左移n位 = 原值 * 2^n 右移n位 = 原值 / 4
1 >> 2 = 0
1 << 2 = 0000 0100 = 4
至此,位运算已经说明完毕。我们可以发现位运算的作用真的就只是在做标记而已,是名副其实的按位运算。
边栏推荐
- Daily question brushing record (6)
- Size end byte order
- 微服务如何拆分
- 同花顺能开户炒股吗?安全吗?
- JSON. Stringify usage
- Openfeign service interface call
- crane:字典项与关联数据处理的新思路
- Implementation of recruitment website based on SSM
- How to download pictures with hyperlinks
- On the complexity of software development and the way to improve its efficiency
猜你喜欢

Neo4j: basic introduction (I) installation and use

Cool in summer

How to set postman to Chinese? (Chinese)

Embedded development: embedded foundation callback function

隐私计算FATE-离线预测

Tiktok practice ~ public / private short video interchange

Explore tidb lightning source code to solve the found bugs

ThreadLocal 源码全详解(ThreadLocalMap)

gcc编译动态库和静态库

IJCAI 2022 | 用一行代码大幅提升零样本学习方法效果,南京理工&牛津提出即插即用分类器模块
随机推荐
Cesium实现卫星在轨绕行
Infiltration learning diary day20
Read a poem
To understand again is the person in the song
Hue new account error reporting solution
【医学分割】unet3+
OpenHGNN发布0.3版本
Tiktok practice ~ public / private short video interchange
How to modify a node_ Files in modules
嵌入式开发:嵌入式基础——回调函数
Vs debugging skills
万物互联时代到来,锐捷发布场景化无线零漫游方案
IJCAI 2022 | greatly improve the effect of zero sample learning method with one line of code. Nanjing Institute of Technology & Oxford proposed the plug and play classifier module
Local visualization tool connects to redis of Alibaba cloud CentOS server
关于接口测试自动化的总结与思考
云原生(三十) | Kubernetes篇之应用商店-Helm
Postman如何设置成中文?(汉化)
ThreadLocal 源码全详解(ThreadLocalMap)
Prometheus 2.26.0 新特性
Viewpager2 usage record