李冬 发表于 2022-11-22 09:46 你去KFC消费,KTV失窃与你何干? |
Longan.Wang 发表于 2022-11-22 08:54 如果除BIT3外其他位为1。会不会造成判断错误 |
1261867136qq 发表于 2022-11-22 08:31 回答的很好 |
名字不是重点 发表于 2022-11-21 18:59 回答的很好 |
前一句是判断状态寄存器的bit3是否为‘1’; 后一句把状态寄存器的bit4和bit3清‘0’,之后再把状态寄存器的内容写到0x8000这个地址。 |
简单的来说: &" “与”运算,有0 出0 ,全1才是1,这么看,应该是判断 某位是否为1 然后,&" “与”运算 加上 取反, 就记住: 是1的那个位,置0 , |
本帖最后由 名字不是重点 于 2022-11-21 19:12 编辑 比如: statusregister &(0x0008)=> 0x0008=B_0000_0000_0000_1000 : "&" 即“与”运算,在这边就是判断statusregister这个变量的第3位是为“0”或为“1”, statusregister &(~0x0018)=> "~" 即数值取反的意思,即 B_ 0000_0000_0001_1000 取反,相当于0xFFFF - 0x0018 = 0xFFE7 ; "&" 即“与”运算,在这边就是把statusregister这个变量的第3/4位置“0”,其它位不变。 如果还没看明白,可真得要拿起C的基本知识重温一下了。 |
本帖最后由 xuyaqi 于 2022-11-22 07:37 编辑 上面一个 , 0x0008 -》..000001000B,判断sta.. 倒数第4位是0还是1 下面一个,(0x0008按位取反后) -》..111110111B,判断sta.. 倒数第4位是0还是1 |
xuyaqi 发表于 2022-11-21 16:38 不够详细 |
本帖最后由 xuyaqi 于 2022-11-22 07:39 编辑 上面一个 , sta.. 与 0x0008 位与 的运算结果作为判断依据; 下面一个,sta.. 与(0x0018按位取反后)位与 的运算结果作为判断依据 |