| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C语言之移位操作符、位操作符详解 -> 正文阅读 |
|
[C++知识库]C语言之移位操作符、位操作符详解 |
目录 1、移位操作符分为左移操作符(>>)和右移操作符(<<)。 左移操作符: 移位规则:左边抛弃,右边补0。 什么意思呢,现在就让我来仔细讲解一番。 比如我们定义一个整型变量a,给它赋初值5.如int a=5;然后将a左移,即a<<2,得到的结果又是多少呢?在讲之前,我们首先要了解到整型5在内存中是怎样存储的,不太清楚的友友们就请看我之前一篇博客整数的3种表达形式及在内存中的存储啦,里面有详细讲解。整型5是以补码的形式来存储的。而将5左移2位就是将存储在内存中的二进制位向左移动2位并将此2位抛弃,右边用0补齐。最后得到的就是5<<2后的结果啦,可以用一下图来简单描述一下~ ?根据上图可知a<<2后得到的结果就是20。 右移操作符: 首先右移运算分为两种。算数移位和逻辑移位。 算数移位规则:左边用该值的符号位填充,右边丢弃。 逻辑移位规则:左边用0补充,右边丢弃。 具体什么意思呢,我们还是来看看几个例子,如将5右移移位,即5>>1,得到的是多少呢? 如果是算数移位的话,就是将5存储在内存中的二进制位向右移动1位并将这一位抛弃,左边用该值存储的二进制位的符号位补齐。如下图: 所以5>>1得到的结果就是2。那逻辑移位呢,逻辑移位就是左边用0,补充,右边抛弃。对正数而言,其符号位就是0,所以算数移位与逻辑移位得到的结果相同,逻辑移位也可以用上图来表示啦,得到的结果也是2。 若将-5右移一位呢,得到的结果又是什么呢。我们先来看看算数移位,就不多赘述了,请看下图: ? 所以-5>>1算数移位得到的就是-3。 同理,我们来看看-5>>1逻辑移位的得到的是什么吧~ ? 因为最高位是0,所以最后的结果就是3啦~。但是一般条件下都是用的算数移位哈。 2、位操作符&? ? ?按位(二进制位)与 |? ? ? 按位(二进制位)或 ^? ? ?按位(二进制位)异或 我们直接来看这段代码,大家可以先猜一下最后输出的是哪三个数呢:
我们先来分析一下:按位与就是将两个数存储的二进制位作比较,两者均为1才为1,否则为0。因此a&b用图来分析就是: 因此a&b的结果就为3了。 按位或就是?将两个数存储的二进制位作比较,两者中有一个为1就为1,否则为0。因此a|b用图来分析就是: ? 所以a|b的值就是-5了。 按位异或就是?两个数存储的二进制位作比较,两者相同为0,相异为1,因此a^b用图来分析就是: ?所以a^b的结果就是-8啦。 最后我们让程序来运行一下: ?是和分析的一样吧~~~ 到这里就结束啦,希望友友们能给个赞哈~~~ |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 8:27:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |