位运算-阿里云开发者社区

开发者社区> 蒋固金> 正文

位运算

简介:
+关注继续查看

位运算在实际开发中的应用范围不如算数运算,但是也是我们应该掌握的必备技能,今天就为大家简单介绍一下位运算的运算过程。
程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。位运算的效率要高于算术运算。
位运算有以下几种方式:

  • 按位与(&)
  • 按位或 (|)
  • 按位异或(^)
  • 按位取反(~)
  • 左移(<<)
  • 带符号右移(>>)
  • 无符号右移(>>>)

按位与(&)

按位与(&)就是将数据的每一位进行与运算,与运算的原则为:同真则为真,其它全为假(1为真,0为假)。

下面通过一个例子来看一下与运算的运算过程:

计算:1 & 2 = ?

首先我们将其转换为二进制,分别为:1和10,右侧对齐,左侧空位补0,按位进行与运算。

    01
&   10
------
    00

运算结果为:00,转换成十进制为:0,即: 1 & 2 = 0

按位或 (|)

按位或 (|)就是将数据的每一位进行或运算,或运算的原则为:同假则为假,其它全为真(1为真,0为假)。

下面通过一个例子来看一下或运算的运算过程:

计算:1 | 2 = ?

首先我们将其转换为二进制,分别为:1和10,右侧对齐,左侧空位补0,按位进行或运算。

    01
|   10
------
    11

运算结果为:11,转换成十进制为:3,即: 1 | 2 = 3

按位异或(^)

按位异或(^)就是将数据的每一位进行异或运算,异或运算的原则为:一真一假则为真,其它全为假(1为真,0为假)。

下面通过一个例子来看一下异或运算的运算过程:

计算:1 ^ 2 = ?

首先我们将其转换为二进制,分别为:1和10,右侧对齐,左侧空位补0,按位进行异或运算。

    01
^   10
------
    11

运算结果为:11,转换成十进制为:3,即: 1 ^ 2 = 3

按位取反(~)

在开始按位取反之前,我们需要先了解如下知识:

机器数和真值

机器数

一个数在计算机中的二进制表示形式,叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号,正数为0,负数为1。
比如,十进制中的数 +3,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011。
那么,这里的 00000011和10000011就是机器数。

真值

因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3而不是形式值131(10000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。
例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1

原码, 反码, 补码

原码, 反码, 补码是机器存储一个具体数字的编码方式.

原码

原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。 比如如果是8位二进制:

[+1]原 = 0000 0001
[-1]原 = 1000 0001

第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:

[1111 1111 , 0111 1111] => [-127 , 127]

原码是人脑最容易理解和计算的表示方式。

反码

反码的表示方法是:正数的反码是其本身,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。

[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反

可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.

补码

补码的表示方法是:正数的补码就是其本身,负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补

对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值。在计算机系统中,数值的存储方式为补码。

回过头来,我们再看按位取反(~)的操作,按位取反(~)就是将数据的每一位进行取反运算,按位取反运算的原则为:真为假,假为真(1为真,0为假)。

下面通过一个例子来看一下取反运算的运算过程:

计算:~2 = ?,以8位为例。

首先我们将其转换为二进制,为:0000 0010,按位进行取反运算。

^   0000 0010
-------------
    1111 1101

运算结果为:[1111 1101]补,转换成十进制为:-3,即: ~2 = -3

左移(<<)

左移(<<)就是将数据的每一位进行左移,超出舍弃,空位补0。相当于原数据乘以2。

下面通过一个例子来看一下左移运算的运算过程:

计算:1 << 3 = ?,以8位为例。

首先我们将其转换为二进制,为:0000 0001,按位进行左移。

<<  0000 0001
-------------
    0000 1000

运算结果为:0000 1000,转换成十进制为:8,即: 1 << 3 = 8

右移(>>)

带符号右移(>>)就是将数据的每一位进行右移,超出舍弃,空位补0。相当于原数据除以2。

下面通过一个例子来看一下左移运算的运算过程:

计算:1 >> 3 = ?,以8位为例。

首先我们将其转换为二进制,为:0000 0001,按位进行右移。

>>  0000 0001
-------------
    0000 0000

运算结果为:0000 0000,转换成十进制为:0,即: 1 >> 3 = 0

无符号右移(>>>)

无符号右移(>>>)就是将数据的每一位进行右移,超出舍弃,空位补0

下面通过一个例子来看一下左移运算的运算过程:

计算:1 >>> 3 = ?,以8位为例。

首先我们将其转换为二进制,为:0000 0001,按位进行右移。

>>> 0000 0001
-------------
    0000 0000

运算结果为:0000 0000,转换成十进制为:0,即: 1 >>> 3 = 0
无符号右移忽略符号位,空位都以0补齐。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用NAT网关轻松为单台云服务器设置多个公网IP
在应用中,有时会遇到用户询问如何使单台云服务器具备多个公网IP的问题。 具体如何操作呢,有了NAT网关这个也不是难题。
26734 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9485 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
9049 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13168 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
4008 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
6886 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
21895 0
+关注
115
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载