向学生解释位操作的最佳方法是什么?

时间:2009-08-12 05:48:01

标签: assembly embedded bit-manipulation

我目前正计划举办一个关于微控制器应用的优化C代码的培训研讨会。

目前我被困在如何解释C中的位操作?

正是我不想要的是引导学生进行比特结构,但引导他们有效地使用比特操作......

有什么建议吗?

6 个答案:

答案 0 :(得分:14)

不要从C语句和语法开始。用基本的布尔代数启动它们,然后让它们手工完成一堆二进制算术。一旦他们真正理解了AND,XOR,NAND等背后的数学,编程语法就可以用任何语言立即理解。更重要的是,他们将完全熟悉有用的转换,如de Morgan定律,以及按位代数的其他属性,如传递性,可用于将长操作折叠成较短的操作。

答案 1 :(得分:4)

我认为你应该专注于通过位操作解决实际任务,以便他们理解为什么。位操作本身非常简单,但如果一个人不理解他们为什么会在第一时间接触到它,那么就会非常容易。

答案 2 :(得分:3)

  1. AND,OR和XOR的真值表
  2. 十进制和十六进制数字的二进制表示
  3. 对二进制数应用AND,OR和XOR。
  4. 设置位而不修改其他位
  5. 清除一点而不修改其他位
  6. 在不修改其他位的情况下切换一下

答案 3 :(得分:2)

从基础开始,然后进行处理。

基本布尔代数

使用真值表练习布尔代数。写下所有输入的列并分解要计算的步骤。

Binary Logical Connectives

不会

A | Not A
--+-------
0 |   1
1 |   0

A | B | A And B
--+---+--------
0 | 0 |    0 
0 | 1 |    0
1 | 0 |    0
1 | 1 |    1

A | B | A Or B
--+---+-------
0 | 0 |    0 
0 | 1 |    1
1 | 0 |    1
1 | 1 |    1    

<强>异或

A | B | A Xor B
--+---+--------
0 | 0 |    0 
0 | 1 |    1
1 | 0 |    1
1 | 1 |    0

练习:

(A And B) Or (B And C)

A | B | C | A And B | B And C | (A And B) Or (B And C)
--+---+---+---------+---------+-----------------------
0 | 0 | 0 |    0    |    0    |           0    
0 | 0 | 1 |    0    |    0    |           0    
0 | 1 | 0 |    0    |    0    |           0    
0 | 1 | 1 |    0    |    1    |           1    
1 | 0 | 0 |    0    |    0    |           0    
1 | 0 | 1 |    0    |    0    |           0    
1 | 1 | 0 |    1    |    0    |           1        
1 | 1 | 1 |    1    |    1    |           1     

二进制表示

十六进制表示

Hex | Binary
----+-------
0   |  0000
1   |  0001
2   |  0010
3   |  0011
4   |  0100
5   |  0101
6   |  0110
7   |  0111
8   |  1000
9   |  1001
A   |  1010
B   |  1011
C   |  1100
D   |  1101
E   |  1110
F   |  1111

So,
1A6 = 0001 1010 0110

减少逻辑声明

Properties of Boolean Algebra

De Morgan's Laws

Not (A Or B) = (Not A) And (Not B)
Not (A And B) = (Not A) Or (Not B)

位操作使用的示例和代码

关于Sean Eron Anderson称为Bit Twiddling Hacks的比特操纵用途的许多用途,有一篇非常好的文章。

答案 4 :(得分:1)

通过给出不同逻辑门和定律的例子来指导它们,你也可以给出几个设计逻辑电路的例子。

答案 5 :(得分:0)

也许从一个效率低下但有用的解决方案开始。

然后展示如何进行有效的实施。