
C语言专题
ben跑的蜗牛
这个作者很懒,什么都没留下…
展开
-
4.2.1.位操作符
4.2.1.1、位与& (1)注意:位与符号是一个&,两个&&是逻辑与。 (2)真值表:1&0=0 1&1=1 0&0=0 0&1=0 (3)从真值表可以看出:位与操作的特点是,只有1和1位于结果为1,其余全是0. (4)位与和逻辑与的区别:位与时两个操作数是按照二进制位彼次对应位相与的,逻辑与是两个操作数作为整体来相与的。(举例:0xAA&0xF0=0xA0, 0xAA && 0转载 2018-05-08 21:04:52 · 126 阅读 · 0 评论 -
4.2.2.位与位或位异或在操作寄存器时的特殊作用
4.2.2.1、寄存器操作的要求(特定位改变而不影响其他位) (1)ARM是内存与IO统一编址的,ARM中有很多内部外设,SoC中CPU通过向这些内部外设的寄存器写入一些特定的值来操控这个内部外设,进而操控硬件动作。所以可以说:读写寄存器就是操控硬件。 (2)寄存器的特点是按位进行规划和使用。但是寄存器的读写却是整体32位一起进行的(也就是说你只想修改bit5~bit7是不行的,必须整体32b转载 2018-05-08 21:05:07 · 383 阅读 · 0 评论 -
4.2.3.如何用位运算构建特定二进制数
4.2.3.1、寄存器位操作经常需要特定位给特定值 (1)从上节可知,对寄存器特定位进行置1或者清0或者取反,关键性的难点在于要事先构建一个特别的数,这个数和原来的值进行位与、位或、位异或等操作,即可达到我们对寄存器操作的要求。 (2)解法1:用工具软件或者计算器或者自己大脑计算,直接给出完整的32位特定数。 优势:可以完成工作,难度也不大,操作起来也不是太麻烦。 劣势:依赖工具,而且不直转载 2018-05-08 21:05:19 · 350 阅读 · 0 评论 -
4.2.5.位运算实战演练2
4.2.4.7、用C语言将一个寄存器的bit7~bit17中的值加17(其余位不受影响)。 关键点:不知道原来的值是多少 思路:第一步,先读出原来bit7~bit17的值 第二步,给这个值加17 第三步,将bit7~bit17清零 第四步,将第二步算出来的值写入bit7~bit17 4.2.4.8、用C语言给一个寄存器的bit7~bit17赋值937,同时给bit21~b转载 2018-05-08 21:05:33 · 201 阅读 · 0 评论 -
4.2.4.位运算实战演练1
回顾:要置1用|,用清零用&,要取反用^,~和>用来构建特定二进制数。 4.2.4.1、给定一个整型数a,设置a的bit3,保证其他位不变。 a = a | (1 或者 a |= (1 4.2.4.2、给定一个整形数a,设置a的bit3~bit7,保持其他位不变。 a = a | (0b11111 或者 a |= (0x1f 4.2.4.3、给定一个整型数a,清除a的bit15,保证转载 2018-05-08 21:05:46 · 199 阅读 · 0 评论 -
4.2.6.技术升级:用宏定义来完成位运算
4.2.6.1、直接用宏来置位、复位(最右边为第1位)。 #define SET_NTH_BIT(x, n) (x | ((1U) #define CLEAR_NTH_BIT(x, n) (x & ~((1U) 4.2.6.2、截取变量的部分连续位。例如:变量0x88, 也就是10001000b,若截取第2~4位,则值为:100b = 4 #define GETBITS(转载 2018-05-08 21:06:01 · 442 阅读 · 0 评论