二进制运算 二进制加减法题目100道

2024-09-1301:41:07综合资讯0

一、按位与 (&): 仅当两位都为 1 时,结果才为 1
- 基本运算:
- 1&1=1
- 1&0=0
- 0&1=0
- 0&0=0
- 示例:
51 & 5 = 0011 0011 & 0000 0101 = 0000 0001 = 1
- 特殊用法:
- 清零: 与 0 相与,结果为 0;与 1 相与,不变。
1011 0101 & 0000 1111 = 0000 0101 // 高四位与 0 清零;低四位与 1 不变。
- 取位: 例如,要获取(0101 1011)的高四位,只需与(1111 0000)相与。
0101 1011 & 1111 0000 = 0101 0000 // 保留高四位,清除低四位。
二、按位或 (|): 只要有一位为 1,结果就是 1
- 基本运算:
- 1|1=1
- 1|0=1
- 0|1=1
- 0|0=0
- 示例:
51 | 5 = 0011 0011 | 0000 0101 = 0011 0111 = 55
- 特殊用法:
- 置 1: 对某些位设置 1。与 0 相或,不变;与 1 相或,结果为 1。
1011 0101 | 0000 1111 = 1011 1111 // 高四位与 0 不变;低四位与 1 相或,全为 1(低四位置 1)。
三、按位异或 (^): 相同为 0,不同为 1
- 基本运算:
- 1^1=0
- 1^0=1
- 0^1=1
- 0^0=0
- 示例:
51 ^ 5 = 0011 0011 ^ 0000 0101 = 0011 0110 = 54
- 特殊用法:
- 取反: 对某些位进行取反。与 0 异或,不变;与 1 异或,结果取反。
1011 0101 ^ 0000 1111 = 1011 1010 // 高四位与 0 异或,不变;低四位与 1 异或,取反。
- 数异或自身等于 0
- 交换值: 利用异或运算交换两个变量的值。
1. 利用第三方变量 C=A; A=B; B=C
2. 利用加减法实现 A=A+B; B=A-B; A=A-B
3. 利用异或运算 A=A^B; B=A^B; A=A^B
四、按位取反 (~): 1 变为 0,0 变为 1
- 基本运算:
- ~1=0
- ~0=1
- 示例:
~51 = ~0011 0011 = 1100 1100 = 204
五、按位左移 (<<): 左移若干位,左边丢弃(超范围者丢弃),右边补 0
- 示例(Java 中,整数为 32 位,未超出 32 位者不应丢弃)
- 正数:2 << 1 = 0010 << 1 = 0100 = 4 // 2 左移 1 位
11 << 2 = 1011 << 2 = 0010 1100 = 44 // 未超出 32 位,左边不应丢弃
- 负数:-14 << 2 -14 是带符号(正数最高位 0,负数最高位 1)的整数,因此 -14 = (1000 1110)原 = (1111 0001)反 = (1111 0010)补(关于原码、反码、补码),计算机用补码表示负数。
-14 << 2 = (1111 0010)补 << 2 = (11 1100 1000)补 = (10 0011 1000)原 = -56
六、按位右移 (>>): 右移若干位,正数左补 0,负数左补 1,右边丢弃
- 示例:
- 正数:4 >> 2 = 0100 >> 2 = 0001 = 1 // 正数左补 0
- 负数:-14 >> 2 -14 是带符号(正数最高位 0,负数最高位 1)的整数,因此 -14 = (1000 1110)原 = (1111 0001)反 = (1111 0010)补(关于原码、反码、补码),计算机用补码表示负数。
-14 >> 2 = (1111 0010)补 >> 2 = (1111 1100)补 = (1000 0100)原 = -4
七、无符号右移 (>>>): 右移若干位,左补 0,右边丢弃
- 示例:
-14 >>> 2 = 1111 1111 1111 1111 1111 1111 1111 0010 >>> 2 = 0011 1111 1111 1111 1111 111 1111 1100 = 1073741820