场景是这样的,对象属性仅只有一个int的扩展字段,新建字段改动太大,所有需要糅合再一个字段里面标示多个属性...
0001 0000
0010 0000
16进制长这样...所以可以利用位来标记不同的属性,还有他们常说的高4位和低4位,例如上面,高4位就是0001,低4位就是0000
假如:高4位的第一位(顺序是从右到左)是1的话,代表北京,依次第二位是1的话代表重庆,依次第三位是1的话代表烤鸭,依次第四位代表火锅
转换成值对应就是:
北京:16, 0001 0000
重庆:32, 0010 0000
烤鸭:64, 0100 0000
火锅:128,1000 0000
首先,组成一个,比如北京烤鸭,值就是0101 0000,对应整型就是80,比如重庆火锅,值就是1010 0000,对应的整型就是160
好了,上面是举例,换做在程序里如何体现呢?这里就需要用到或运算
var 北京 = 16; //0001 0000
var 重庆 = 32; //0010 0000
var 烤鸭 = 64; //0100 0000
var 火锅 = 128;//1000 0000
var 北京烤鸭 = 0;
北京烤鸭 = 北京烤鸭 | 北京;
北京烤鸭 = 北京烤鸭 | 烤鸭;
Console.WriteLine($"北京烤鸭:{北京烤鸭} / {ConvertErValue(北京烤鸭)}");
//北京烤鸭:80 / 01010000
var 重庆火锅 = 0;
重庆火锅 = 重庆火锅 | 火锅;//顺序不影响
重庆火锅 = 重庆火锅 | 重庆;
Console.WriteLine($"重庆火锅:{重庆火锅} / {ConvertErValue(重庆火锅)}");
//重庆火锅:160 / 10100000
赋值搞定了,某些时候,需要验证,当前值是否是我们想要的,比如验证当前是北京的吗?
接着上面的代码如下:验证就需要用到与运算
//验证,是否是北京的
var is北京 = (北京烤鸭 & 北京) == 北京;
Console.WriteLine($"是北京的吗?答:{is北京}");
//是北京的吗?答:True
is北京 = (重庆火锅 & 北京) == 北京;
Console.WriteLine($"是北京的吗?答:{is北京}");
//是北京的吗?答:False
//验证,是否是火锅吗
var is火锅 = (北京烤鸭 & 火锅) == 火锅;
Console.WriteLine($"是火锅吗?答:{is火锅}");
//是火锅吗?答:False
is火锅 = (重庆火锅 & 火锅) == 火锅;
Console.WriteLine($"是火锅吗?答:{is火锅}");
//是火锅吗?答:True
好了,以上就是或运算和与运算的场景,项目中还是挺适用的,以前比较懵,今天领导讲解了下,瞬间就懂了,下面是全部的代码:
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Xml;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
var 北京 = 16; //0001 0000
var 重庆 = 32; //0010 0000
var 烤鸭 = 64; //0100 0000
var 火锅 = 128;//1000 0000
var 北京烤鸭 = 0;
北京烤鸭 = 北京烤鸭 | 北京;
北京烤鸭 = 北京烤鸭 | 烤鸭;
Console.WriteLine($"北京烤鸭:{北京烤鸭} / {ConvertErValue(北京烤鸭)}");
//北京烤鸭:80 / 01010000
var 重庆火锅 = 0;
重庆火锅 = 重庆火锅 | 火锅;//顺序不影响
重庆火锅 = 重庆火锅 | 重庆;
Console.WriteLine($"重庆火锅:{重庆火锅} / {ConvertErValue(重庆火锅)}");
//重庆火锅:160 / 10100000
//验证,是否是北京的
var is北京 = (北京烤鸭 & 北京) == 北京;
Console.WriteLine($"是北京的吗?答:{is北京}");
//是北京的吗?答:True
is北京 = (重庆火锅 & 北京) == 北京;
Console.WriteLine($"是北京的吗?答:{is北京}");
//是北京的吗?答:False
//验证,是否是火锅吗
var is火锅 = (北京烤鸭 & 火锅) == 火锅;
Console.WriteLine($"是火锅吗?答:{is火锅}");
//是火锅吗?答:False
is火锅 = (重庆火锅 & 火锅) == 火锅;
Console.WriteLine($"是火锅吗?答:{is火锅}");
//是火锅吗?答:True
}
/// <summary>
/// 10进制转二进制字符串
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
private static string ConvertErValue(int value)
{
var erValue = Convert.ToString(value, 2);
for (int i = 0, length = 8 - erValue.Length; i < length; i++)
{
erValue = "0" + erValue;
}
return erValue;
}
}
}