几种逻辑运算符的运算规则及使用

本文介绍了二进制位操作符在编程中的常见用途,包括按位与用于判断奇偶性,按位或进行取整,按位异或用于变量互换,以及取反运算符在数组和字符串搜索中的应用。此外,还讨论了左移和右移运算符在提高计算效率上的作用,如快速实现乘以2的幂和除以2的幂的运算。
  • &
    按位与
    如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
    常用用法: 判断奇偶性:用if ((a & 1) == 0) 代替 if (a % 2 == 0)来判断a是不是偶数。

  • |
    按位或
    两个相应的二进制位中只要有一个为1,该位的结果值为1
    常用用法:取整: 12.34 | 0 === 12; -10.213 | 0 === -10

  • ^
    按位异或
    若参加运算的两个二进制位值相同则为0,否则为1
    作用:两个变量互换值,var a = 2, b=5;
    执行:a ^= b; b ^= a; a ^= b;

  • ~
    取反运算符
    计算方法:
    正数按位取反总结
    (1) 十进制转为二进制原码
    (2) 二进制原码按位取反
    (3) 符号位保留,其余位取反+1
    (4) 二进制原码转为十进制
    负数按位取反总结
    (1) 十进制转为二进制原码
    (2) 符号位保留,其余位取反+1
    (3) 二进制原码按位取反
    (4) 二进制原码转为十进制
    等价于 ~x === -x-1 或者 -(x+1)
    作用:
    1、配合 indexOf() 判断数组或者字符串中是否存在某个元素
    因为 不存在返回-1,~-1 = 0 ,大于-1的值,0,1,2,3 … 按位非的值-1,-2,-3,-4
    if判断只要是非 0 都为 真
    2、向下取整 比Math.floor(), parseInt() 等效率高
    ~~5.5 === 5; ~~-5.5 === -5

  • <<
    左移
    用来将一个数的各二进制位全部左移N位,右补0

    作用:左移常被用来做 * (2 ^ n)的运算,因为直接基于二进制运算,所以左移效率比 * (2 ^ n)高,
    x * (2 ^ n) ==> x << n
    例如:10 * (2 * 2* 2) === 10 << 3

  • >>
    右移
    将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数, 高位补0

    作用:右移常被用来做 / (2 ^ n)的运算,效率更高
    例如:~~(12 / (2*2*2)) === ~~(12 >> 3)

  • >>>
    无符号右移
    运算符规则是:各二进位全部右移若干位,高位补0,低位丢弃。

逻辑运算主要有与、或、非三种基本类型,此外还有一些衍生出的逻辑运算。以下为你详细介绍: ### 基本逻辑运算 - **与运算(AND)**:在逻辑运算中,只有当所有参与运算的条件都为真时,结果才为真;只要有一个条件为假,结果就为假。在C语言中,逻辑运算符用`&&`表示,例如`(a > 5) && (b < 10)`,只有当`a > 5`和`b < 10`这两个条件同时满足时,整个表达式才为真,否则为假[^2]。 ```c #include <stdio.h> int main() { int a = 6; int b = 8; if ((a > 5) && (b < 10)) { printf("条件成立\n"); } else { printf("条件不成立\n"); } return 0; } ``` - **或运算(OR)**:逻辑运算只要参与运算的条件中有一个为真,结果就为真;只有当所有条件都为假时,结果才为假。在C语言里,逻辑运算符用`||`表示,比如`(a > 5) || (b < 3)`,只要`a > 5`或者`b < 3`其中一个条件满足,表达式就为真,只有两个条件都不满足时,表达式才为假[^2]。 ```c #include <stdio.h> int main() { int a = 6; int b = 8; if ((a > 5) || (b < 3)) { printf("条件成立\n"); } else { printf("条件不成立\n"); } return 0; } ``` - **非运算(NOT)**:非运算用于取反一个条件的值,如果条件为真,经过非运算后结果为假;如果条件为假,经过非运算后结果为真。在C语言中,逻辑运算符用`!`表示,例如`!(a > 5)`,当`a > 5`为真时,`!(a > 5)`为假;当`a > 5`为假时,`!(a > 5)`为真[^2]。 ```c #include <stdio.h> int main() { int a = 4; if (!(a > 5)) { printf("条件成立\n"); } else { printf("条件不成立\n"); } return 0; } ``` ### 衍生逻辑运算 - **异或运算(XOR)**:异或运算规则是,当两个条件的逻辑值不同时,结果为真;当两个条件的逻辑值相同时,结果为假。例如在数字电路中,异或常用于奇偶校验等场景。 ```python # Python 中的异或运算示例 a = True b = False result = a ^ b print(result) ``` - **与非运算(NAND)**:与非运算是先进行与运算,然后再对结果进行非运算。也就是当所有条件都为真时,结果为假;只要有一个条件为假,结果就为真。 ```python # Python 模拟与非运算 a = True b = True nand_result = not (a and b) print(nand_result) ``` - **或非运算(NOR)**:或非运算是先进行或运算,然后对结果进行非运算。即当所有条件都为假时,结果为真;只要有一个条件为真,结果就为假。 ```python # Python 模拟或非运算 a = False b = False nor_result = not (a or b) print(nor_result) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值