Arduino 中的按位非
arduinoarduino boardsarduino idearduino programming language
与逻辑非(反转表达式的真值)不同,按位非适用于数字的每个位并反转其值(0 反转为 1 和 1 反转为 0)。运算符是 ~。
因此语法是 ~a,其中 a 是此运算符必须应用的数字。
请注意,数字表示中的所有前导 0 也将转换为 1。例如,如果您的主板使用 16 位来表示整数,那么 ~10 将如下所示
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 10 | ||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | ~10=-11 |
如您所见,10 的每一位都被反转了。此数字对应于使用 2 的补码 -11。您可以使用此网站快速将十进制数转换为其 2 的补码,反之亦然 https://www.exploringbinary.com/twos-complement-converter/。
示例
让我们在串行监视器上验证这一点。代码如下 −
void setup() { // 将您的设置代码放在此处,运行一次: Serial.begin(9600); Serial.println(); int a = 10; Serial.println(~a); } void loop() { // 将您的主代码放在此处,以便重复运行: }
输出
串行监视器输出为 −
如您所见,输出完全符合预期。