计算机位运算规则,关于位运算

进制

所谓进制,就是满几进1的制度,生活中我们不知不觉已经用了很多,12个为一打,这是满12进1;三个月为1季度,这是满3进1。

在搬砖生涯中,我们碰到更多的是二进制,八进制,十进制,以及十六进制。

计算机底层的电子元件只有两种状态,高电平(有电)和低电平(没电),高电平的时候为1,低电平的时候为0,于是二进制应运而生。

那么为啥又有八进制和十六进制呢,因为相比二进制,表示相同的数值时,他们要更短一些,方便阅读和记忆。

计算机中存储单位的换算

8bit = 1byte

1kb = 1024byte

1mb = 1024kb

...

bit是计算机中最小的信号单位,只能表示两种状态,范围太小了,英文字母就有26个,还有其他字符,远远不够

于是就有了byte,它可以表示2的8次方256种,我们所熟知的ASCII码就占一个byte

正码反码补码,草泥..sorry

计算机中所有的有符号数字都是按照补码的形式存储的

1、 正数的原码 = 反码 = 补码

2、 负数呢

原码 = 符号位 + 数值位(数据的绝对值的32位二进制表示)

反码 = 符号位不变 + 数值位取反(0->1,1->0)

补码 = 反码 + 1

让你惊艳的位运算

首先要知道,位运算在计算机里面全部都是用数值的补码进行运算的,运算完之后呈现给我们的是原码

1、按位与& :都为1才为1

2、按位或| :有一个1就为1

3、按位异或 ^ :不同才为1

4、按位取反 ~ : 规则见上文反码描述,注意正数的原码反码补码都是它自己

5、左移<< : 数值x左移n位 = x * 2^n

6、右移>> : 数值x右移n位 = x / 2^n (符号位是什么就用什么补充)

7、无符号右移>>> : 左边空出来的用0补充,于是无符号右移之后,正数还是那个正数,负数就偷偷变了性,成正数了。

为什么要BB这么多?

因为最近疏于学习

没有素材

em...

才不是

位运算的作用老大了,运算效率还特别高,之前研读JDK源码的时候,发现底层很多算法都用到了位运算,特别巧妙和惊艳。

位运算的应用

第一个例子:

利用 a ^ b ^ b == a 的特性,可实现

1、以b作为密钥的简单加密

2、在不利用中间变量的情况下实现两个变量的交换

a = a ^ b

b = a ^ b

a = a ^ b

😊

第二个例子:

利用 x ^ (x - 1),可实现

1、判断一个数x是否是2的整数次幂

利用 res = x & (x-1), res为0 则x是2的整数次幂,否则不是

这是为喵?

试想一下,2的n次幂的二进制表示大概是怎样?是酱:

0000010000,从右向左第(n+1)个位置为1,其他位置都是0

那么,一个(2的n次幂)-1的数的二进制表示又是怎样? 是酱:

0000001111,从右向左第n个位置为1,然后前面0到(n-1)位置是0,n往后都是1

所以如果x是2的整数次幂 是 x & (x-1)=0的充分条件,必要条件也是可以利用上面的思路得证的。

2、判断一个二进制数中有多少个1

要不要自己证明一下?😊

还有很多很多,以后我也会多多学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值