前言

一些非常基础的东西,在实际工作中没有用到、很少用到。一旦遇到,又不知所云。最近遇到一个问题,把一个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=1024KB
10=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#位运算基本概念与计算过程的更多相关文章

  1. C#位运算实际运用

    前言 前几天写了一篇关于c#位操作,c#位运算基本概念与计算过程 最后提到一个实际问题 需求:C# 用两个short,一个int32拼成一个long型 要求:现在有两个short和一个int,需要拼成 ...

  2. C#位运算实际作用之操作整型某一位

    1.前言 前几天写了两篇关于c#位运算的文章 c#位运算基本概念与计算过程 C#位运算实际运用 在文中也提到了位运算的实际作用之一就是合并整型,当时引用了一个问题: C# 用两个short,一个int ...

  3. javascript 位运算

    位运算博大精深,本文总结下基本的位运算的概念. 1.整数的二进制码 位操作符用于在最基本的层次上,即按内存中表示数值的位来操作数值.ECMAScript中的所有数值都以IEEE-754 64位格式存储 ...

  4. Java I/O : Bit Operation 位运算

    Writer      :BYSocket(泥沙砖瓦浆木匠) 微         博:BYSocket 豆         瓣:BYSocket FaceBook:BYSocket Twitter   ...

  5. 我们必须要了解的Java位运算(不仅限于Java)

    本文原创地址为 https://www.cnblogs.com/zh94/p/16195373.html 原创声明:作者:陈咬金. 博客地址:https://www.cnblogs.com/zh94/ ...

  6. Java位运算总结:位运算用途广泛《转》

    前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...

  7. Java位运算总结:位运算用途广泛

    前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...

  8. Python笔记_第一篇_面向过程_第一部分_3.进制、位运算、编码

    通过对内存这一个部分的讲解,对编程会有一个相对深入的认识.数据结构是整个内存的一个重要内容,那么关于数据结构这方面的问题还需要对进制.位运算.编码这三个方面再进行阐述一下.前面说将的数据结构是从逻辑上 ...

  9. 利用位运算进行a+b的计算(Java&&Python)

    题目链接 需要用到的位运算操作:异或(^).与(&).右移(<<) 异或运算:又称不进位加法,a^b得到的结果为a与b相加,但是需要进位的地方不进位得到的结果 与运算:找出来a和b ...

随机推荐

  1. Android的颜色值转换

    Android的颜色int值比较变态,是个负值,用计算机术语讲叫补码,手工转换比较麻烦,首先看看文档 https://developer.android.com/reference/android/g ...

  2. pg_restore数据库恢复指令

    pg_restore restores a PostgreSQL database from an archive created by pg_dump. Usage:  pg_restore [OP ...

  3. DjangoRestFramework实践笔记

    1.Restful服务的实现方式一共三种:function based view,class based view,viewset+router,这三种实现方式的封装重度依序升高,越往后越适合典型CU ...

  4. 基于Python的数据分析(3):文件和时间

    在接下来的章节中,我会重点介绍一下我自己写的基于之前做python数据分析的打包接口文件common_lib,可以认为是专用于python的第三方支持库.common_lib目前包括文件操作.时间操作 ...

  5. SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)

    SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)-DML 1.SQL INSERT INTO 语句(在表中插入) INSERT INTO 语句用于向表中插入新记录. SQL I ...

  6. Python3实现ICMP远控后门(上)

    这几天一直在研究远控木马的一些通信协议,比如TCP,UDP,ICMP,DNS,HTTP等等,对于TCP,UDP这两种就不讲解了,因为太常见了. 大家可能对采用ICMP,DNS的木马不是很熟悉,其实这两 ...

  7. The Beam Model:Stream &amp; Tables翻译(上)

    本文由  网易云发布. 作者:周思华 本篇文章仅限内部分享,如需转载,请联系网易获取授权. 本文尝试描述Beam模型和Stream & Table理论间的关系(前者描述于数据流模型论文.the ...

  8. AVL Tree 操作

    1.AVL树是带有平衡条件的二叉查找树, 一棵AVL树是其每个节点的左子树和右子树的高度最多差1的二叉查找树. 2.AVL树的删除要比插入复杂.如果删除相对较少,那么用懒惰删除的方法是最好的策略. 3 ...

  9. 图片滚动(UP)的JS代码详解(offsetTop、scrollTop、offsetHeigh)【转】

    源地址 信息技术教材配套的光盘里有一段设置图片滚动的JS代码,与网络上差不多,实现思路:一个设定高度并且隐藏超出它高度的内容的容器demo,里面放demo1和 demo2,demo1是滚动内容,dem ...

  10. Python_字符串格式化

    #冒泡排序 array = [1,2,3,6,5,4] for i in range(len(array)): for j in range(i): if array[j] > array[j ...