一、基本概念补充

位、字节、字符(英文字母)、汉字、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
7.TB,1TB=1024GB
一个汉字占两个字节,也就是16位,一篇1000字的文章,大概就是16*1000 个二进制的0或1 。
一个10M的短视频,也就是10M=1024KB*10=1024字节*10*10=1024位*8*10*10
大概就是919200个二进制的0和1了
short 是16位,int是32位,long是64位

1.什么是位运算

在掌握位运算之前,应该清楚什么是位运算?什么样的数据类型可以进行位运算?云运算的结果是什么?
1.位运算的对象是int 、char 类型,简而言之就是对二进制的1101(13)进行运算
2.位运算的结果是整型

符号意义运算对象类型运算结果类型示例
~逻辑非运算整型、char整型~a
&逻辑与运算a&b
|逻辑或运算a|b
<<位左移运算a<<2
>>位右移运算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次方

二、位运算的运用

1、判断奇偶数
常用的(a%2!=0)
位运算 if(a&1){奇数}
原理:任何偶数二进制第一位数必定0,而奇数必定是1,而1的二进制就是1,所以
可以用这个判断

2、交换变量
a^=b,b^=a,a^=b
原理:
第一步没啥好说a = a^b
第二步:b=b^a,也就是b=b^a^b,也就是b=a^0,此处换值
第三步:a=a^b 也就是a=a^b^a,也就是b

 

3、左移<< 向左移n位,超出的就舍掉

①num<<2表示num左移2位(左移1位即乘以2的1次幂)

比如 3<<2 ==3*2的2次幂=12

②判断目标整数是否为2的整数次幂

4、右移>> 向右移n位,超出的就舍掉

num>>1表示num右移1位(右移1位即除以2的1次幂,并且取整。)

 

 

 注意:本内容来自:c#位运算基本概念与计算过程

                                  位运算的妙用

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐