c#位运算基本概念与计算过程
前言
一些非常基础的东西,在实际工作中没有用到、很少用到。一旦遇到,又不知所云。最近遇到一个问题,把一个int16(short) 、两个bool变量整合成一个int32(int),当听到这个要求时,我第一反应是不是需求弄错了,后来才发现是自己才疏学浅,这里就需要位运算相关的概念。
这里补充一下这几个基本概念
位、字节、字符(英文字母)、汉字、KB、MB、GB、TB的关系
1.位:bit,也叫比特位,是计算机表示数据最小的单位,用二进制0和1来存储
2.字节:byte,1byte(1B)=8b,一个字节=8位
3.字符:char,1char=2byte=16b,1个字符=2个字节=16位
4.KB,1KB=1024byte(1024B)
5.MB,1MB=1014KB
6.GB,1GB=1024MB
7TB,1TB=1024GB
一个汉字占两个字节,也就是32位,一篇1000字的文章,大概就是321000 的二进制0或1 。
一个10M的短视频,也就是10M=1024KB10=1024字节1010=1024b1010*8
大概就是919200个二进制的0和1了
short 是16位,int是32位,long是64位
1.什么是位运算
在掌握位运算之前,应该清楚什么是位运算?什么样的数据类型可以进行位运算?云运算的结果是什么?
1.位运算的对象是int 、char 类型,简而言之就是对二进制的1101(13)进行运算
2.位运算的结果是整型
符号 | 意义 | 运算对象类型 | 运算结果类型 | 示例 |
---|---|---|---|---|
~ | 逻辑非运算 | 整型、char | 整型 | ~a |
& | 逻辑与运算 | a&b | ||
| | 逻辑或运算 | a|b | ||
位左移运算 | a | |||
>> | 位右移运算 | a>>2 |
2.位逻辑与运算
&与运算是将两个运算对象按位于进行与运算。
规则是:
1&1=1
0&1=0
0&0=0
如图:
15的二进制是0000 1111
20的二进制是0001 0100
15&20的结果就是0000 0100 即结果是4
3.位逻辑或运算
|位逻辑或运算是将两个运算对象按位进行或运算,运算的规则是
1|1=1
1|0=1
0|0=0
如15|20的结果计算结果就是31 即二进制0001 1111
0000 1111(15的二进制) | 0001 0100(20的二进制)= 0001 1111结果是31
4.位逻辑异或运算
^ 位逻辑异或运算 是将两个运算对象按位进行异或运算,规则是:
1异或1等于0
1异或0等于1
0异或0等于0
即:相同得0,相异得1。
0000 1111 ^ 0001 0100= 0001 1011结果是27
5.位逻辑左移运算
位逻辑左移运算是将按位向左边移动若干位,左移后空出的部分为0
比如15的二进制0000 1111 左移8位就是1111 0000 0000(15<<8)结果是3840
左移3位(15<<3)就是0111 1000结果是120
左移就是相当于乘,左移1位就是相当于乘以2的1次方,左移3位就是相当于乘以2的3次方,左移8位就是相当于乘以2的8次方
a<<1 =a乘以2的1次方
a<<2 =a乘以2的2次方
a<<3 =a乘以2的3次方
6.位逻辑右移运算
位逻辑右移运算是将按位向右边移动若干位,右移后空出的部分为0
比如0000 1111(15)左移3位(15<<3)就是0000 0001(1)
右移相当于整除,右移1位相当于除以2的1次方,右移2相当于除以2的2次方。
a>>1 = a整除2的1次方
a>>2 = a整除2的2次方
a>>3 = a整除2的3次方
7.位运算的作用
如将一个月的签到记录保存到1个int类型中、权限设置、将4个short合并成一个long类型,16个bool类型合并成1个short。
如这个问题所示
需求:C# 用两个short,一个int32拼成一个long型
要求:现在有两个short和一个int,需要拼成一个long型,高16位用short,中间32位用int,最低16位用另外一个short
https://bbs.csdn.net/topics/392202825?page=1
做法就是:
((long)shortA << 48 )+ ((long)intA << 16)+ shortB=longResult
讲解:
高16位的shortA先左移48,那么longResult 64位的最左边16位(高16位)就是shortA
中间32位intA 就是先将intA左移16位,那么这个longResult的中间32位就是intA
低16位就是最后剩下的16位用shortB。
那么疑问来了可以通过longResult返推出shortA,shortB,intA。当然是不能这是直接相加。
返回不应该用这种组合字符串的方式
((long)shortA << 48 ) 16位二进制0或1的字符串
((long)intA << 16) 32位二进制0或1的字符串
shortB 16位二进制0或1的字符串
将这三个字符串拼接成64位二进制字符串,再将这个64位二进制字符串转成一个long。
c#位运算基本概念与计算过程的更多相关文章
- C#位运算实际运用
前言 前几天写了一篇关于c#位操作,c#位运算基本概念与计算过程 最后提到一个实际问题 需求:C# 用两个short,一个int32拼成一个long型 要求:现在有两个short和一个int,需要拼成 ...
- C#位运算实际作用之操作整型某一位
1.前言 前几天写了两篇关于c#位运算的文章 c#位运算基本概念与计算过程 C#位运算实际运用 在文中也提到了位运算的实际作用之一就是合并整型,当时引用了一个问题: C# 用两个short,一个int ...
- javascript 位运算
位运算博大精深,本文总结下基本的位运算的概念. 1.整数的二进制码 位操作符用于在最基本的层次上,即按内存中表示数值的位来操作数值.ECMAScript中的所有数值都以IEEE-754 64位格式存储 ...
- Java I/O : Bit Operation 位运算
Writer :BYSocket(泥沙砖瓦浆木匠) 微 博:BYSocket 豆 瓣:BYSocket FaceBook:BYSocket Twitter ...
- 我们必须要了解的Java位运算(不仅限于Java)
本文原创地址为 https://www.cnblogs.com/zh94/p/16195373.html 原创声明:作者:陈咬金. 博客地址:https://www.cnblogs.com/zh94/ ...
- Java位运算总结:位运算用途广泛《转》
前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...
- Java位运算总结:位运算用途广泛
前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...
- Python笔记_第一篇_面向过程_第一部分_3.进制、位运算、编码
通过对内存这一个部分的讲解,对编程会有一个相对深入的认识.数据结构是整个内存的一个重要内容,那么关于数据结构这方面的问题还需要对进制.位运算.编码这三个方面再进行阐述一下.前面说将的数据结构是从逻辑上 ...
- 利用位运算进行a+b的计算(Java&&Python)
题目链接 需要用到的位运算操作:异或(^).与(&).右移(<<) 异或运算:又称不进位加法,a^b得到的结果为a与b相加,但是需要进位的地方不进位得到的结果 与运算:找出来a和b ...
随机推荐
- postgresql to_char 问题
select create_time from xxx; select to_char(create_time,'yyyy-MM-dd HH24:mm:ss') as create_time fr ...
- 完美解决ScollView内嵌ListView的问题
1.之前看了别人的一代码,解决办法是自己定制一个ListView,代码如下: public class NoScrollListView extends ListView { public NoScr ...
- jquery文本框内容实时监控
$("#A").bind("input propertychange", function () { $("#B").val($(this) ...
- Oracle入门《Oracle介绍》第一章1-3 Oracle 逻辑组件
一.数据库的逻辑结构是从逻辑的角度分析数据库的组成.Oracle 的逻辑组件包括: 1.表空间 表空间是数据库中最大的逻辑单位,一个 Oracle 数据库至少包含一个表空间,就是名为SYSTEM的系统 ...
- Linux的安装(虚拟机环境)与基础配置
一.背景 本文介绍如何安装虚拟机VMware以及如果在虚拟机上安装Linux系统以及Linux安装完毕之后的基础配置 需要准备的东西有VMware以及Linux镜像文件 二.下载安装VMware 下载 ...
- python实现四则运算和效能分析
代码github地址:https://github.com/yiduobaozhi/-1 PSP表格: 预测时间(分钟) planning 计划 15 Estimate 估计这个任务需要多少时间 10 ...
- vh、vw、vmin、vmax 知多少
介绍一些 CSS3 新增的单位,平时可能用的比较少,但是由于单位的特性,在一些特殊场合会有妙用. vw and vh 1vw 等于1/100的视口宽度 (Viewport Width) 1vh 等于1 ...
- 【转】利用 three.js 开发微信小游戏的尝试
前言 这是一次利用 three.js 开发微信小游戏的尝试,并不能算作是教程,只能算是一篇笔记吧. 微信 WeChat 6.6.1 开始引入了微信小游戏,初期上线了一批质量相当不错的小游戏.我在查阅各 ...
- element-ui bug及解决方案
1.element-ui 使用MessageBox后弹窗显示异常 解决方案:去掉Vue.use(MessageBox); 2.element-ui 分页切换后若改变总数会导致请求两次 解决方案:< ...
- 远程备份binlog服务
Ⅰ.bonlog server介绍 对于binlog的备份,之前文章里说的是有从机,一般不备份,那现在人家就是 要备份嘛,怎么办嘛, 写个脚本每天夜里去把前一天产生的binlog拷贝出来可以不? 行啊 ...