zoukankan      html  css  js  c++  java
  • 关于逻辑运算符的通俗理解

      现在基本不跟硬件通讯,软件开发很少有人去理解这些逻辑运算符了,经常会用到一些逻辑运算符,今天整理下,通俗的理解一下各运算符是怎么情况.

         先放一下测试代码,这个代码本身没有什么意义,主要是对结果的说明   

    class Program
        {
            static void Main(string[] args)
            {
                int a = 123, b = 0;
                int result;
    
                #region 1.逻辑 非(~) 运算
    
                a = 123;
                result = (byte)~a;
                Console.WriteLine("{0} 非(~) 的运算", a);
                PrintResult(result, a, b);
                
                #endregion
    
                #region 2.逻辑 与(&) 运算
    
                b = 12;
    
                result = a & b;
                Console.WriteLine("{0} 与(&) {1} 的运算", a, b);
                PrintResult(result, a, b);
    
                #endregion
    
                #region 3.逻辑 或(|) 运算
    
                result = a & b;
                Console.WriteLine("{0} 或(|) {1} 的运算", a, b);
                PrintResult(result, a, b);
    
                #endregion
    
                #region 3.逻辑 异或(^) 运算
    
                result = a ^ b;
                Console.WriteLine("{0}  异或(^) {1} 的运算", a, b);
                PrintResult(result, a, b);
    
                #endregion
    
                #region 4.左位移(<<) 运算
                a = 5;
                b = 4;
                result = (byte)(a << b);
                Console.WriteLine("{0} 左移位( << ) {1}", a, b);
                Console.WriteLine("运算结果:	{0}", result);
                Console.WriteLine("{0}的2进制值为:	{1}", a, FormatBase2(a));
                Console.WriteLine("{0}的2进制值为:	{1}", result, FormatBase2(result));
    
                #endregion
    
                #region 5.右位移(>>) 运算
                a = 5;
                b = 1;
                result = (byte)(a >> b);
                Console.WriteLine("{0} 右移位( >> ) {1}", a, b);
                Console.WriteLine("运算结果:	{0}", result);
                Console.WriteLine("{0}的2进制值为:	{1}", a, FormatBase2(a));
                Console.WriteLine("{0}的2进制值为:	{1}", result, FormatBase2(result));
                
                #endregion
    
                Console.ReadKey();
            }
    
            static void PrintResult(int result, int a, int b)
            {
                Console.WriteLine("运算结果:	{0}", result);
                Console.WriteLine("{0}的2进制值为:	{1}", a, FormatBase2(a));
                if (b > 0)
                {
                    Console.WriteLine("{0}的2进制值为:	{1}", b, FormatBase2(b));
                }
                Console.WriteLine("{0}的2进制值为:	{1}", result, FormatBase2(result));
                Console.WriteLine();
            }
    
            static string FormatBase2(int num)
            {
                string r = Convert.ToString(num, 2);
                while (r.Length < 8)
                {
                    r = "0" + r;
                }
                return r;
            }
        }
    

    说明一下,关于位的逻辑运算,比如常说的 :1个8位字节,可以理解成8位是一个字节,通常用于硬件的一些权限设置,比如: 11111111,一个字节就可以控制8个权限,确实很省啊.

    以下的例子都与这个2进制相关,看到2进制的结果就会明白,原来这些符号的起名是那么直观.

    先普及一下计算机基础知识,计算机是只认识0和1; ,我们叫,真和假,或者专业点叫 true和false

     1. 非运算 c#运算符号:~ ,windows计算器运算符号: Not

         123 非(~) 的运算
      运算结果:       132
      123的2进制值为: 01111011
      132的2进制值为: 10000100

        根据上面的结果,清楚的看到,原来"非"的运算,是那么简单,

        通俗的讲就是:如果是真(1)的,那么就是假(0),如果是假的(0)那么就是真的(1)

     2. 与 运算 c#符号:&,计算器符号:And

      123 与(&) 12 的运算
      运算结果:       8
      123的2进制值为: 01111011
      12的2进制值为:   00001100
      8的2进制值为:     00001000

       根据2进制结果来看,

       通俗的将:如果 都是"真的(1)"那么才是"真的"否则就是"假的(0)".

    3.逻辑 或(|) 运算 ,计算器符号:Or  
       123 或(|) 12 的运算 
      运算结果:       127
      123的2进制值为: 01111011
      12的2进制值为:   00001100
      127的2进制值为: 01111111  

       通俗解释:如果有一个真的,那么就是真的(1),否则就是假的(0);

    4.逻辑 异或(^) 运算 ,计算器符号:Xor  
      123  异或(^) 12 的运算
      运算结果:       119
      123的2进制值为: 01111011
      12的2进制值为:   00001100
      119的2进制值为: 01110111

      关于异或的说明,测试参数做了些改动,为了把异或的3种可能都呈现出来.

      异或的概念是:相同的为假(0),不同的为真(1); 这个好像这么解释就行了.

    5.左位移(<<) 运算 计算器符号:Lsh

       5 左移位(<<) 4
        运算结果:       80
        5的2进制值为:    00000101
        80的2进制值为:  01010000

       一句话:往右边补4个零

    6.右位移(>>) 运算 计算器符号:Rsh

       5 右移位( >> ) 1

       运算结果:       2
       5的2进制值为:   00000101
       2的2进制值为:   00000010

       解释:往左边补4个零

    其实看到这些结果,几乎不用解释了,他都是按"位"进行计算的,转换为2进制就非常直观了.

  • 相关阅读:
    0.嵌入式系统 Boot Loader 技术内幕
    JAVA_SE基础——25.面向对象练习
    JAVA_SE基础——24.面向对象的内存分析
    JAVA_SE基础——23.类的定义
    深入理解java的static关键字
    JAVA_SE基础——22.面向对象的概念
    JAVA_SE基础——21.二维数组的定义
    Java常用排序算法/程序员必须掌握的8大排序算法
    JAVA_SE基础——20.数组的常见操作
    JAVA_SE基础——19.数组的定义
  • 原文地址:https://www.cnblogs.com/xtdhb/p/4178597.html
Copyright © 2011-2022 走看看