C# 位运算基本大全
1.原码 反码 补码
只用补码进行计算,且没有减法。只有用补码进行加法运算,具体原因,详见:http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html
因为为了让计算机的电路基础设计简单,只有加法,选择使用符号位,再因为通过原码进行正树和负数进行运算,显然不能实现,所以,增加反码,补码。一切都是为了设计更加简单。
利用反码进行减法,只能部分计算没问题。对于+0,和-0分别是0000 0000,1000 000,于是补码的出现解决了0的符号问题。这样用 0000 0000表示0,就不会存在-0的问题。而且可以用1000 000 表示-128。
利用补码,不仅仅修复了0的符号以及两个编码的问题,还能够多表示一个最低数,这就是为什么8位二进制使用原码或反码的表示范围为【-127,+127】,而使用补码则是【-128,127】。
因为机器使用补码,所以对于编程中常用到的32位int类型,可以表示的范围是:【-2^31,2^31-1】因为第一位表示的是符号位。而使用补码表示时又可以多保存一个最小值。
2.位运算 换算
①位 b 也叫比特位,是计算机数据最小的单位,用二进制0和1来存储。
②字节 byte,1 byte = 8 b,一个字节=8位
③字符 char,1 char = 2byte=16b,1个字符 =2 个字节 = 16位
④KB,1KB = 1024byte
⑤汉字,1个汉字 = 2 个字节=16位。
3.位运算 逻辑运算
按位与 &
1&1=1
1&0=0
0&0=0
按位或 |
1|1=1
1|0=1
0|0=0
按位异或 ^ ,按照每一位进行异或,相同为0,不同为1
按位取反 ~
~1=0
~0=1
应用:
判断数的奇偶性:与1&,若结果为1,则为奇数,反之为偶数。
密码加密:两次异或同一个数之后结果不变,这个也可以用来在不会有溢出的风险下交换两个数的值。
C# 位运算基本大全的更多相关文章
- Java 位运算2-LeetCode 201 Bitwise AND of Numbers Range
在Java位运算总结-leetcode题目博文中总结了Java提供的按位运算操作符,今天又碰到LeetCode中一道按位操作的题目 Given a range [m, n] where 0 <= ...
- 简简单单学会C#位运算
一.理解位运算 要学会位运算,首先要清楚什么是位运算?程序中的所有内容在计算机内存中都是以二进制的形式储存的(即:0或1),位运算就是直接对在内存中的二进制数的每位进行运算操作 二.理解数字进制 上面 ...
- SQL Server时间粒度系列----第8节位运算以及设置日历数据表节假日标志详解
本文目录列表: 1.位运算 2.设置日历数据表节假日标志 3.总结语 4.参考清单列表 位运算 SQL Server支持的按位运算符有三个,分别为:按位与(&).按位或(|).按位异或 ...
- js中的位运算
按位运算符是把操作数看作一系列单独的位,而不是一个数字值.所以在这之前,不得不提到什么是"位": 数值或字符在内存内都是被存储为0和 1的序列,每个0和1被称之为1个位,比如说10 ...
- Java中的位运算
昨天去面试的时候做到了一道Java的位运算题目,发现有个运算符不懂:">>>",今天特地查了一下,并小结一下常见的位运算符号: ~ 按位非(NOT)(一元运算) ...
- C#位运算讲解与示例
首先每一个权限数都是2的N次方数 如:k1=2 ; //添加 k2=4 ; //删除 k3=8; //修改 ... 如此定义功能权限数,当需要组合权限时,就需要对各个所拥有的权限数按位或了. 如: p ...
- C#枚举中的位运算权限分配浅谈
常用的位运算主要有与(&), 或(|)和非(~), 比如: 1 & 0 = 0, 1 | 0 = 1, ~1 = 0 在设计权限时, 我们可以把权限管理操作转换为C#位运算来处理. 第 ...
- Java位运算经典实例
一 源码.反码.补码 正数的源码.反码.补码相同,例如5: 5的源码:101 5的反码:101 5的补码:101 负数的源码.反码.补 ...
- C入门---位运算
程序中的所有数在计算机内存中都是以二进制的形式储存的.位运算直接对整数在内存中的二进制位进行操作.由于位运算直接对内存数据进行操作,不需要转成十进制,因此处理速度非常快. (1),与(&)运算 ...
随机推荐
- Python程序中的进程操作-进程间通信(multiprocess.Queue)
目录 一.进程间通信 二.队列 2.1 概念介绍--multiprocess.Queue 2.1.1 方法介绍 2.1.2 其他方法(了解) 三.代码实例--multiprocess.Queue 3. ...
- Update 19.11 for Azure Sphere
今天,微软发布了面向Azure Sphere的19.11更新,其主要亮点就是加入了对开发工具Visual Studio Code和Linux开发环境的支持.具体来讲,本次更新包含3个部分: 1. Az ...
- javascript在数组的循环中删除元素
在开发JavaScript应用的过程中,经常会遇到在循环中移除指定元素的需求. 按照常规的思路,就是对数组进行一个for循环,然后在循环里面进行if判断,在判断中删除掉指定元素即可. 但是实际情况往往 ...
- 在 .NET Core 下使用 SixLabors.ImageSharp 操作图片文件(放大、缩小、裁剪、加水印等等)的几个小示例
1. 基础 1.1 将图片的宽度和高度缩小一半 直接贴代码了: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup ...
- 害死人不偿命的(3n+1)猜想-PTA
卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 (3n+1) 砍掉一半.这样一直反复砍下去,最后一定在某一步得到 n=1.卡拉兹在 1950 ...
- 【转载】Gradle for Android 第五篇( 多模块构建 )
Android studio不仅允许你为你的app和依赖库创建模块,同时也可为Android wear,Android TV,Google App Engine等创建模块,而这些单独的模块又可以在一个 ...
- Linux(ubuntu) 一行代码搞定查看文件目录
ls 命令:• ls 是英文单词 list 的简写,其功能为列出目录的内容,是用户最常用的命令之一,类似于 DOS 下的 dir 命令 ls命令之后加各种参数的作用: ls -a 显示指定目录下所有子 ...
- 版本管理·玩转git(推到远程仓库)
经过前面的练习,你在本地的仓库里管理代码已经比较熟练了,但如果是团队开发呢,如何配合起来呢? 我们可以把版本仓库放在互联网上,开发者把自己最新的版本推到线上仓库,同时,把线上仓库的最新代码拉到自己本地 ...
- UML类图和用例图
软件体系结构的多视图 kruchten提出了软件体系结构的4+1视图模型,其中用例图位于中心位置(4+1视图中的1). 逻辑视图 一种静态建模视图 进程视图 一种并发进程或任务视图 开发视 ...
- Python—编码与解码(encode()和decode())
编码与解码 decode英文意思是解码,encode英文原意是编码. Python 里面的编码和解码也就是 unicode 和 str 这两种形式的相互转化.编码是 unicode -> str ...