Skip to content

Latest commit

 

History

History
74 lines (57 loc) · 3.06 KB

C位运算符.md

File metadata and controls

74 lines (57 loc) · 3.06 KB

位运算符

位操作是程序设计中对位模式按位或二进制数的一元和二元操作。在现代架构中,位运算的运算速度通常与加法运算相同,但仍然快于乘法运算

二进制

是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数

位模式

一种二进制数1和0的一维或二维数组,是计算机用来存储和处理信息的最小单位

六种位运算符

| 按位或

  • 表达式:A | B
  • 功能:将 A 的各位与 B 的对应位进行比较,如果两者中至少有一个为1,A | B对应位上的值为 1,否则为 0
  • 示例1 | 2 = 3
A 0 1
B 1 0
A | B 1 1

& 按位与

  • 表达式:A & B
  • 功能:将 A 的各位与 B 的对应位进行比较,如果两者都为为1,A & B对应位上的值为 1,否则为 0
  • 示例:1 & 2 = 0
A 0 1
B 1 0
A & B 0 0

^ 按位异或

  • 表达式:A ^ B
  • 功能:将 A 的各位与 B 的对应位进行比较,如果两者不同,A ^ B对应位上的值为 1,否则为 0
  • 示例:1 ^ 2 = 3
A 0 1
B 1 0
A ^ B 1 1

~ 按位取反

  • 表达式:~A
  • 功能:将 A 的各位都取反(即 0 变 1,1 变 0)后所得到值
  • 示例:~1 = 4294967294 (A 为 unsigned int 且 32位)
A 0000 0000 0000 0001
~A 1111 1111 1111 1110

<< 左移运算符

  • 表达式:A << n (n > 0)
  • 功能:将 A 的值向左移动 n 位,右边空出的 n 位用 0 填补
  • 示例:1 << 1 = 2
A 0 1
A << 1 1 0

>> 右移运算符

  • 表达式:A >> n (n > 0)
  • 功能:将 A 的值向右移动 n 位,左边空出的 n 位用 0 填补
  • 示例:1 >> 1 = 0
A 0 1
A >> 1 0 0

注意:

  • 在对无符号(unsigned)类型值进行右移时,左边空出的部分使用 0 填充
  • 在对有符号类型值进行右移时,有2种移位方案可以选择,方案的选择由对应的编译器决定
    • 逻辑移位:用 0 填充
    • 算术移位:用符号位(0: 正数,1: 负数)填充。以保证原数正负形式不变