我目前正计划举办一个关于微控制器应用的优化C代码的培训研讨会。
目前我被困在如何解释C中的位操作?
正是我不想要的是引导学生进行比特结构,但引导他们有效地使用比特操作......
有什么建议吗?
答案 0 :(得分:14)
不要从C语句和语法开始。用基本的布尔代数启动它们,然后让它们手工完成一堆二进制算术。一旦他们真正理解了AND,XOR,NAND等背后的数学,编程语法就可以用任何语言立即理解。更重要的是,他们将完全熟悉有用的转换,如de Morgan定律,以及按位代数的其他属性,如传递性,可用于将长操作折叠成较短的操作。
答案 1 :(得分:4)
我认为你应该专注于通过位操作解决实际任务,以便他们理解为什么。位操作本身非常简单,但如果一个人不理解他们为什么会在第一时间接触到它,那么就会非常容易。
答案 2 :(得分:3)
答案 3 :(得分:2)
从基础开始,然后进行处理。
基本布尔代数
使用真值表练习布尔代数。写下所有输入的列并分解要计算的步骤。
不会强>
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
减少逻辑声明
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)
也许从一个效率低下但有用的解决方案开始。
然后展示如何进行有效的实施。