C# 关于位运算的学习笔记
一、理解什么是位运算
程序中的所有内容在计算机内存中都是以二进制的形式储存的(即:0或1),简单来说位运算就是直接对在内存中的二进制数的每位进行运算操作。
二、学习前先了解一下有哪些运算,运算符都怎么使用的,如下图所示。
对于上面的运算符做个基础的认识,接下来我们详细看一下每个运算符到底该怎么使用呢?
三、在讲位运算之前先讲一下进制转换,方便下文讲解位运算。
2进制、8进制、16进制、32进制、64进制等转换成10进制计算方法我得出一个公式:(^表示次方,如:2^2,即2的2次方,8^5即8的5次方)
每位数字转换成10进制时=进制数^(次方)数字索引位(从0开始计算)*数字
计算示例:(注意黑粗体字)
2进制数:10100=2^0*0+2^1*0+2^2*1+2^3*0+2^4*1=0+0+4+0+16=20
8进制数:24=8^0*4+8^1*2=4+16=20
16进制数:0x14(注意0x是用来表示16进制数的意思,不是数字本身的内容)=16^0*4+16^1*1=4+16=20
至于各进制之间的转换,比如:2进制转换成16进制,如果想自己手算,一般都是先转成10进制,然后将数字进行与进制数相除,直到得出余数小于或等于进制数(或0),当然作为程序员的我们,应该使用现有的方法,如下:
Convert.ToString(数字,进制数)
如:Convert.ToString(10,2)=01010,Convert.ToString(10,8)=12 ,Convert.ToString(13,16)=0x0d
int i10 = ;
int i16 = 0x5A; Console.WriteLine("示例一:"); Console.Write("10进制【66】转成2、8、16进制结果:{0}、{1}、{2}\n",
Convert.ToString(i10, ), Convert.ToString(i10, ), Convert.ToString(i10, )); Console.Write("16进制【0x5A】转成2、8、10进制结果:{0}、{1}、{2}\n",
Convert.ToString(i16, ), Convert.ToString(i16, ), Convert.ToString(i16, )); Console.ReadLine();
输出如下图:
在这里我要另外讲一下,使用上方Convert.ToString(数字,进制数)转换的时候,转二进制时,左边为0时,0会自动去掉,但是有的时候我们又不希望去掉,因此我想到一种方法是补零。
使用 public String PadLeft(int totalWidth, char paddingChar);进行补零,因为我需要的是得到一个八位的二进制数,所以是PadLeft(8, '0')
padleft 返回一个新字符串,该字符串通过在此实例中的字符左侧填充指定的 Unicode 字符来达到指定的总长度,从而使这些字符右对齐
/// <summary>
/// 将十进制字符串转二进制
/// </summary>
/// <param name="hexString">返回字符串</param>
/// <returns></returns>
public static string HexStringByStr(string hexString)
{
string result = string.Empty;
int d = Convert.ToInt32(hexString);
//十进制转二进制字符串
result = Convert.ToString(d, 2).PadLeft(8, '0');
return result;
}
四、接下来看一下位运算,看一下每一个运算符是怎么使用的
#region 位运算与运算
int a = ; //11的二进制是0000 1011
int b = ; //13的二进制是0000 1101
Console.WriteLine("a 二进制:"+Convert.ToString(a, ).PadLeft(,'')+ " b 二进制:" + Convert.ToString(b, ).PadLeft(,''));
Console.WriteLine("a & b 二进制输出:"+Convert.ToString(a & b,).PadLeft(,'')); //11 & 13的结果就是0000 1001 即结果是9
Console.Read();
#endregion
结果输出:
#region 位运算或运算
int a = ;
int b = ;
Console.WriteLine("a 二进制:" + Convert.ToString(a, ).PadLeft(, '') + " b 二进制:" + Convert.ToString(b, ).PadLeft(, ''));
Console.WriteLine("a | b 二进制输出:" + Convert.ToString(a | b, ).PadLeft(, ''));
Console.Read();
#endregion
结果输出:
#region 位运算异或运算
int a = ;
int b = ;
Console.WriteLine("a 二进制:" + Convert.ToString(a, ).PadLeft(, '') + " b 二进制:" + Convert.ToString(b, ).PadLeft(, ''));
Console.WriteLine("a ^ b 二进制输出:" + Convert.ToString(a ^ b, ).PadLeft(, ''));
Console.Read();
#endregion
结果输出:
#region 位运算左移运算
int a = ;
int b = ;
Console.WriteLine("a 二进制:" + Convert.ToString(a, ).PadLeft(, '') + " b 二进制:" + Convert.ToString(b, ).PadLeft(, ''));
Console.WriteLine("a << 2 二进制输出:" + Convert.ToString(a << , ).PadLeft(, ''));
Console.WriteLine("b << 2 二进制输出:" + Convert.ToString(b << , ).PadLeft(, ''));
Console.Read();
#endregion

#region 位运算右移运算
int a = ;
int b = ;
Console.WriteLine("a 二进制:" + Convert.ToString(a, ).PadLeft(, '') + " b 二进制:" + Convert.ToString(b, ).PadLeft(, ''));
Console.WriteLine("a >> 2 二进制输出:" + Convert.ToString(a >> , ).PadLeft(, ''));
Console.WriteLine("b >> 2 二进制输出:" + Convert.ToString(b >> , ).PadLeft(, ''));
Console.Read();
#endregion
输出结果:
ok,今天关于位运算的讲解就到这里了,有疑问的欢迎指正。
C# 关于位运算的学习笔记的更多相关文章
- c#位运算小例子笔记
关于位运算,网上有挺多好的博客介绍过,我就不多解释了 这里只记录一个小例子,是在理解位运算时候写的,帮助自己加深一下印象,做个笔记mark一下 具体场景 摇骰子游戏 1每个骰子有6个点,1-3为小,4 ...
- JavaScript 位运算总结&拾遗
最近补充了一些位运算的知识,深感位运算的博大精深,此文作为这个系列的总结篇,在此回顾下所学的位运算知识和应用,同时也补充下前文中没有提到的一些位运算知识. 把一个数变为大于等于该数的最小的2的幂 一个 ...
- 位运算总结&拾遗
JavaScript 位运算总结&拾遗 最近补充了一些位运算的知识,深感位运算的博大精深,此文作为这个系列的总结篇,在此回顾下所学的位运算知识和应用,同时也补充下前文中没有提到的一些位运算知识 ...
- Python学习笔记:第2天while循环 运算符 格式化输出 编码
目录 1. while循环 continue.break和else语句 2. 格式化输出 3. 运算符 3.1 算数运算 3.2 比较运算符 3.3 赋值运算符 3.4 逻辑运算符 3.5 成员运算符 ...
- 对于写Python学习笔记的看法
学习写笔记是一个不错的学习方法,好些同学在学习Python过程中也会写学习笔记.俗话说好记性不如烂笔头,我很赞同这个说法. 我列举几个学习Python写笔记的好处: 1.Python知识的二度巩固 通 ...
- 【LeetCode】位运算 bit manipulation(共32题)
[78]Subsets 给了一个 distinct 的数组,返回它所有的子集. Example: Input: nums = [,,] Output: [ [], [], [], [,,], [,], ...
- 位运算求最值 学习笔记 (待补充QAQ)
没有什么前言?直接进入正题qwq 俩俩异或 求最值: 建trie树 O(n)枚举每个数找这个数的最值,每次反走就成,还可以剪枝一波(如果在某位已经小于ans显然可以直接return? void Ins ...
- C#学习笔记-----C#枚举中的位运算权限分配
一.基础知识 什么是位运算? 用二进制来计算,1&2:这就是位运算,其实它是将0001与0010做位预算 得到的结果是 0011,也就是3 2.位预算有多少种?(我们就将几种我们权限中会 ...
- php学习笔记位运算
位运算 源码:用二进制表示一个数,这个码就是源码. 比如2====00000000 00000000 0000000 00000010 正数的反码 源码 补码都一样 负数的源码是符号位取反.第一个位 ...
随机推荐
- vue中过滤器filter
Vue.js 允许我们自定义过滤器,可被用作一些常见的文本格式化.过滤器可以用在两个地方:mustache 插值表达式. v-bind表达式.过滤器应该被添加在 JavaScript 表达式的尾部,由 ...
- python3.7解释器安装及配置虚拟环境
目录 环境准备 一.开始安装解释器(安装很简单,直接上图) 二.配置pip工具下载源 安装虚拟环境 环境准备 1.Windows系统,本人是 Windows10专业版 2.python解释器安装包,本 ...
- i春秋web作业2.25
Web安全工程师(入门班) [全国线上入门班53期]课后作业 2020-2-25 DorinXL 请思考:XXE漏洞的原理的是什么?有哪些危害? XXE漏洞全称XML External Ent ...
- day20-双下new方法,单例模式
# 1. __new__:构造方法,它创造对象,程序员口头语:new一个对象.先执行__new__方法再执行___init__方法. class Goods: def __init__(self):# ...
- 感叹号在Linux bash中使用技巧
1. 重复执行上一条指令 !! [root@iZ23t6nzr7dZ python]# ls /usr/local/ aegis bin etc games include lib lib64 li ...
- Uber退出东南亚留下烂摊子,给“中国式并购”带来哪些启示
当下,从全球范围内来看很多互联网企业都采用了"复制+粘贴"的疯狂推进模式.它们往往在某一个国家或地区取得领先优势后,就快速将相同模式在全球推进去占领当地市场.无论结果是一家独大占据 ...
- Cisco路由器配置基本命令
特权模式:enable Router1 # show running-config Router1 # show ip route Router # show ip interface brief S ...
- iOS UICollectionViewCell 的拖动
1.长按cell的情况下实现拖动,所以理应想到用长按手势. 2.既然实现移动cell,就要看看UICollectionView 有没有方法或者协议可以移动的.通过查看UICollectionView的 ...
- deeplearning.ai 神经网络和深度学习 week2 神经网络基础
1. Logistic回归是用于二分分类的算法. 对于m个样本的训练集,我们可能会习惯于使用for循环一个个处理,但在机器学习中,是把每一个样本写成一个列向量x,然后把m个列向量拼成一个矩阵X.这个矩 ...
- xml_class来自 phpcms
<?php class xml{ var $parser; var $document; var $stack; var $data; var $last_opened_tag; var $is ...