Arduino 中的按位非
与逻辑非不同,逻辑非会反转表达式的真值,按位非适用于数字的每一位,并反转其值(0 到 1,1 到 0)。运算符是 ~。
因此,语法为 ~a,其中 a 是该运算符必须应用到的数字。
请注意,数字表示形式中的所有前导 0 也都将转换为 1。例如,如果你的电路板使用 16 位来表示整数,则 10 将如下所示
0 | 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 | 1 | 0 | 1 | 0 | 1 | ~10=-11 |
正如你所见,10 的每一位都已反转。根据二进制补码,该数字对应于 -11。你可以使用该网站快速将十进制数字转换成二进制补码,反之亦然 https://www.exploringbinary.com/twos-complement-converter/.
你可以了解更多关于二进制补码的信息 &minnus; https://tutorialspoint.com/two-scomplement
示例
让我们在串口监视器上验证这一点。代码如下 −
void setup() { // put your setup code here, to run once: Serial.begin(9600); Serial.println(); int a = 10; Serial.println(~a); } void loop() { // put your main code here, to run repeatedly: }
输出
串口监视器输出为 −
如您所见,输出与预期相同。
广告