gpt4 book ai didi

c - 教程中的按位运算困惑

转载 作者:行者123 更新时间:2023-11-30 14:46:55 24 4
gpt4 key购买 nike

怎么样:

GIMSK |= (1 << PCIE); 
PCMSK |= (1 << PCINT4);

等于(我可以在程序设置中使用上面或下面的内容,都可以工作并激活引脚 4),GIMSK 和 PCMSK 由于某种原因彼此相等,我正在尝试了解原因。

GIMSK = 0b00100000; 
PCMSK = 0b00010000;

首先: https://thewanderingengineer.com/2014/08/11/pin-change-interrupts-on-attiny85/

第二: https://embeddedthoughts.com/2016/06/06/attiny85-introduction-to-pin-change-and-timer-interrupts/

数据: http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2586-AVR-8-bit-Microcontroller-ATtiny25-ATtiny45-ATtiny85_Datasheet.pdf

该表显示位掩码中的 PCIE 为 0b00100000,所以 |= (1 << PCIE) 等于吗?我不明白如果 PCIE 应该是这样的话,做一个转变会改变这个值..您如何以及为何使用它而不是二进制?我猜它会改变它,但显然,不知怎的,它并没有改变。我在几个不同的地方问过这个问题,但没有人回答,所以我来到这里。希望有人能解释一下。

我是 C 新手,我今天刚刚学习了按位运算,试图弄清楚这里发生了什么,我的代码确实可以使用 or ,但我想知道为什么!谢谢。

最佳答案

它是相等的,因为在OR操作之前这些寄存器的所有其他位都是0

1u << x 向左移动 x 个位置。结果,您得到的数字除 x 之外的所有位均已清除

关于c - 教程中的按位运算困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51802192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com