📜  布尔逻辑和非按位运算符

📅  最后修改于: 2020-01-13 12:02:38             🧑  作者: Mango

包括C,C++,Java和Python在内的大多数语言都提供布尔类型,可以将其设置为FalseTrue
请考虑以下在布尔值上使用Logical Not(或!)运算符的程序。
Python:

# Python程序,展示在布尔值的Logical Not or !
a = not True
b = not False
print a
print b
# 输出: False
#         True

C/C++:

// C/C++程序,展示在布尔值的Logical Not or !
#include 
#include 
int main()
{
    bool a = 1, b = 0;
    a = !a;
    b = !b;
    printf("%d\n%d", a, b);
    return 0;
}
// 输出: 0
//         1

Java:

// Java程序,展示在布尔值的Logical Not or !
import Java.io.*;
class GFG
{
    public static void main (String[] args)
    {
        boolean a = true, b = false;
        System.out.println(!a);
        System.out.println(!b);
    }
}
// 输出: False
//         True

C#:

// C# 程序,展示在布尔值的Logical Not or !
using System;
class GFG
{
    public static void Main ()
    {
        bool a = true, b = false;
        Console.WriteLine(!a);
        Console.WriteLine(!b);
    }
}
// 输出: False
//         True  

上面程序的输出是预期的,但是如果我们之前没有使用Bitwise Not(或〜)运算符,则后面程序的输出可能与预期的一样。
Python:

# A Python程序,展示在布尔值的Bitwise Not 或 ~
a = True
b = False
print ~a
print ~b

C/C++:

// C/C++程序,展示在布尔值的Bitwise Not 或 ~
#include 
using namespace std;
int main()
{
    bool a = true, b = false;
    cout << ~a << endl << ~b;
    return 0;
}

输出:

-2
-1

原因:按位非运算符〜返回数字的补码,即它将每个1切换为0,将每个0切换为1。布尔值True和False分别具有值1和0。
〜是按位非运算符,

  • 表达式“〜True”返回1的按位倒数。
  • 表达式“〜False”返回0的按位倒数。

Java不允许将〜运算符应用于布尔值。例如,以下程序产生编译器错误。

// Java程序,展示在布尔值的Bitwise Not 或 ~
import Java.io.*;
class GFG
{
    public static void main (String[] args)
    {
        boolean a = true, b = false;
        System.out.println(~a);
        System.out.println(~b);
    }
}

输出:

6: error: bad operand type boolean for unary operator '~'
        System.out.println(~a);
                           ^
7: error: bad operand type boolean for unary operator '~'
        System.out.println(~b);
                           ^
2 errors

结论:
“逻辑非或!”表示布尔值,“按位非或〜”表示整数。当应用整数运算符时,C / C++和Python之类的语言会将布尔值自动提升为整数类型。但是Java不会这样做。