位运算
为什么会存在十六进制并且广泛使用?
我的理解是十进制描述的是纯数值型,十六进制是标称型+数值型,标称型用于处理状态机。人有十个手指,这可能是十进制最早起源的原因,但是无法表示状态。我们如何记录正负,甚至是虚数、复数。如果不加入额外标识无法表示吧,那机器呢,他可是只能运算二进制信号,所以最合适的描述载体有两个必要条件:
- 二的直系等比倍数;
- 大于十并且越小越好。
那么十六是最合适的选择。
计算机通信的基本原理是将电信号转换为逻辑信号,其转换方式是将高低电频表示为二进制数中的1和0, 再通过不同的二进制序列来表示所有的信息。
含义 | Pascal语言 | C语言 | Java | Scala | Python |
---|---|---|---|---|---|
按位与 | a and b | a & b | a & b | a & b | a & b |
按位或 | a or b | a ¦ b | a ¦ b | a ¦ b | a ¦ b |
按位异或 | a xor b | a ^ b | a ^ b | a ^ b | a ^ b |
按位取反 | not a | ~a | ~a | ~a | ~a |
左移 | a shl b | a << b | a << b | a << b | a << b |
带符号右移 | a shr b | a >> b | a >> b | a >> b | a >> b |
无符号右移 | a >>> b | a >>> b | a >>> b |
BIN_OCT_HEX_DEC
BIN : binary 二进制
OCT : octal 八进制
DEC : decimal 十进制
HEX : hexadecimal 十六进制
位运算基于二进制
与 and运算 &
同位同为1结果为1
5 & 3
标识 | DEC | BIN |
---|---|---|
数一 | 5 | 0101 |
数二 | 3 | 0011 |
结果 | 1 | 0001 |
4 & 1
标识 | DEC | BIN |
---|---|---|
数一 | 4 | 0100 |
数二 | 1 | 0001 |
结果 | 0 | 0000 |
或 or运算 |
同位存在1结果为1
5 | 3
标识 | DEC | BIN |
---|---|---|
数一 | 5 | 0101 |
数二 | 3 | 0011 |
结果 | 7 | 0111 |
10 | 5
标识 | DEC | BIN |
---|---|---|
数一 | 2 | 0010 |
数二 | 5 | 0101 |
结果 | 7 | 0111 |
异或 xor运算 ^
同位不同结果为1
5 ^ 3
标识 | DEC | BIN |
---|---|---|
数一 | 5 | 0101 |
数二 | 3 | 0011 |
结果 | 6 | 0110 |
10 ^ 5
标识 | DEC | BIN |
---|---|---|
数一 | 2 | 0010 |
数二 | 5 | 0101 |
结果 | 7 | 0111 |
10 ^ 10
标识 | DEC | BIN |
---|---|---|
数一 | 7 | 0111 |
数二 | 7 | 0111 |
结果 | 0 | 0000 |
非 not运算 ~
按位取反
~ 5
标识 | DEC | BIN |
---|---|---|
数一 | 5 | 0101 |
结果 | -6 | 1010 |
左移位 shl运算 <<
左移2n位后,低位补0
5 << 2
标识 | DEC | BIN |
---|---|---|
数一 | 5 | 0000 0101 |
结果 | 10 | 0000 1010 |
右移位 shr运算 >>
右移2n位,高位补0
4 >> 2
标识 | DEC | BIN |
---|---|---|
数一 | 4 | 0000 0100 |
结果 | 2 | 0000 0010 |
易失去精度,无法恢复
5 >> 2
标识 | DEC | BIN |
---|---|---|
数一 | 5 | 0000 0101 |
结果 | 2 | 0000 0010 |
- 标题: 位运算
- 作者: Spike Zhang
- 创建于 : 2017-04-03 19:36:48
- 更新于 : 2024-06-21 14:31:36
- 链接: https://chaosbynn.github.io/2017/04/03/位运算/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论