计算机中的位操作符与整数在计算机里的存储(一):环球聚焦
写在前面
长久以来,位操作符一直困扰着我,为什么呢?因为其虽易用,但是我自己却理解不透彻,用着总觉得有隐患?那么今天就来详细地理一下计算机中的位操作符与整数在计算机中的存储。
(资料图片仅供参考)
本文是作为一个非科班出身程序员的自我学习记录之作,如果能够在自我提高的同时也能帮助读友提高,我自是高兴;如有任何疑问或者不妥之处,敬请评论指正。
写着写着有些太多,故而分两次写完吧,本次只讨论计算机中整数的表示方法。
计算机中数字的表示方法
我们都知道在计算机中,数是以补码表示的,这样表示定义是什么呢,而好处又是什么?
先看定义:
正数的原码、反码、补码是其本身;
负数的原码是其本身,反码是除了符号位以外按位取反,补码则是反码加1;
举例说明:
例1
//uint8_t即是无符号8位数,也就是跟char相同的定义
/*0000 1000,这是其原码反码和补码,也就是其在计算机中是这么存储的,也就是说计算机中某个位置一定有0000 1000这一段二进制码*/
uint8_t x = 0x08;
uint8_t y = x >> 1;//x = 0000 1000 -> y = 0000 0100 = 4;
这里x的二进制表示为0000 1000,最高符号位为0,表示是正数。8位无符号数8的原反补码如下:
原码:0000 1000
反码:0000 1000
补码:0000 1000
正数的原码反码补码都是其本身。
例2
int8_t x = -0x08;//int8_t即是有符号8位数,其最高位为符号位
int8_t y = x >> 1;//x = 1000 1000 -> y = 1000 0100 = -4;
uint8_t z = x >> 1;
8位有符号数-8,其二进制表示为1000 1000,最高位1表示符号位,表示负数,那么其原码反码补码为:
原码:1000 1000
反码:1111 0111
补码:1111 1000
负数的原码是其本身,反码是除了符号位外按位取反,补码是反码加1.
为什么使用补码?
由上面的例子就知道了正数与负数的原反补码的表示方法。那么随之而来的一个问题是,为什么不用直观的原码来表示数,而用繁琐的补码?
在网上查了很多,大致归结为如下两个原因:
最主要原因,使用补码可以将符号位和其他位进行统一处理,同时减法也可以按加法来进行运算。
这样带来了两个好处:符号位统一到计算中去和减法可以按加法来计算,而这两个好处都使得CPU设计更容易。
例3
加入考虑符合位的话,那么很明显CPU的加减法设计要变复杂,不仅要单独处理符号位还要判断除了符号位之外的大小,并且还要考虑溢出时符号位不被冲掉。
那么假设符号位不单独考虑呢?
//-8 + 15 = 7, 8-bit depth operation
//原码运算
1000 1000
+ 0000 1111
= 1001 0111 //-23
//反码运算,
1111 0111
+ 0000 1111
= 10000 1000 //8,第一位截断丢掉
// 补码运算
1111 1000
+ 0000 1111
= 10000 0111//7,第一位丢掉
那么由上面可以看到,在符号位纳入计算的情况下,只有补码计算的结果是正确的,并且可以将减法按加法计算。
那么不禁要问,为什么要这么设计补码呢?
这里涉及到补码的本质的问题。
那么首先,-8,它就是0-8的结果,按8-bit 2进制表示如下
//87654 3210//bit
11111 //表示借位,与10进制相同,只不过2进制中借1位表示2
0000 0000
-0000 1000 =11111 1000
由于我们要向更高位(8th-bit借位),并且在结果中会丢掉超出范围的位(上面结果中最高位的1),那么上述结果其实等于1 0000 0000 - 0000 1000,即
//87654 3210//bit
11111 //表示借位,与10进制相同,只不过2进制中借1位表示2
10000 0000
-0000 1000 =01111 1000
当丢掉最高位后,那么1 0000 0000 - 0000 1000 其实与0000 0000 - 0000 1000 的结果是一样的!
而1 0000 0000 = 1111 1111 + 1.那么求-8也就变成了1111 1111 - 0000 1000 + 1,也即是:
1
1111 1111
-0000 1000 =1111 0111//在该结果上加1,即得1111 1000
在二进制中,如果用w-bit全1的一个值(2w−1)减去一个w-bit的二进制数x,那么结果其实就是对x按位取反(如上)。
所以负数的补码就是对其除符号位外按位取反再加1。其实对于补码,另外的一个求法跟这个是等价的,就是一个负数-x(x>0)的补码就是对x按位取反(包括符号位),再加1。因为x是正的,其符号位肯定是0,那么按位取反后就是1(表示负的)。
那么这里再说负数补码的本质,-x(x>0)在w-bit下的补码就是2w−x的一个快速算法而已。
为什么补码适用于正数的加法?
那么还有一个疑问,补码为什么会适用于正数的加法呢?
实际上,我们要证明的是,X-Y或X+(-Y)可以用X加上Y的2的补码完成。
Y的2的补码等于(11111111-Y)+1。所以,X加上Y的2的补码,就等于:
X + (11111111-Y) + 1
我们假定这个算式的结果等于Z,即 Z = X + (11111111-Y) + 1
接下来,分成两种情况讨论。
第一种情况,如果X小于Y,那么Z是一个负数。这时,我们就对Z采用2的补码的逆运算,求出它对应的正数绝对值,再在前面加上负号就行了。所以,
Z = -[11111111-(Z-1)] = -[11111111-(X + (11111111-Y) + 1-1)] = X - Y
第二种情况,如果X大于Y,这意味着Z肯定大于11111111,但是我们规定了这是8位机,最高的第9位是溢出位,必须被舍去,这相当于减去100000000。所以,
Z = Z - 100000000 = X + (11111111-Y) + 1 - 100000000 = X - Y
这就证明了,在正常的加法规则下,可以利用2的补码得到正数与负数相加的正确结果。换言之,计算机只要部署加法电路和补码电路,就可以完成所有整数的加法
标签:
相关推荐:
最新新闻:
- 《java爬虫系列第一讲-爬虫入门》爬取电影列表信息 全球头条
- requests出现编码问题怎么办?编码问题的解决办法
- php/goodsDetail:页面绑定点击事件和传递
- 环球看点!传感器模块是如何应用于手机的?分享传感器模块之于手机方面的应用
- 鼠标事件:MouseEventer接口的5个方法_世界热文
- 【架构图】FFmpeg的库函数源代码分析:天天通讯
- 学习Java开发的第一步——安装配置
- KIS7:现有的栈溢出检测模式的改进:天天聚看点
- 小程序开发外包费用一般是多少?小程序开发外包的总成本有哪些?
- 计算机中的位操作符与整数在计算机里的存储(一):环球聚焦
- mysql索引选择错误的几种情况 mysql之优化器选择索引|天天热门
- 改错前奥运参赛国的出场次序(附程序)_焦点精选
- 什么是一本二本?一本和二本的区别是什么? 全球通讯
- 为什么计算机会出现乱码?计算机出现乱码的原因分析|环球快资讯
- 天天观察:索尼发布会:三月PS+二三档游戏公开:《幽灵线东京》、《神秘海域盗贼遗产》等
- 天天快消息!计算机网络最早出现在哪个年代?互联网、因特网、万维网三者的关系
- 《街头霸王6》新实机 展示嘉米等三个新角色
- 晨报:《死亡岛2》3月2日公开新实机 《真人快打12》确认于今年发布_焦点速看
- 世界微速讯:State of Play:《街头霸王6》新预告 南美热裤少女闪亮登场
- 全球快看点丨创见u盘怎么样?创见U盘价格及快速修复方法
- 当前速递!什么是基础设施建设?础设施的特点与作用
- 支付宝用zhifubao.com域名意欲何为?详情介绍-世界独家
- 【世界时快讯】lic是什么文件?lic文件怎么打开?
- 前沿热点:xbox游戏机怎么样?微软Xbox电视游戏机评测
- 马克·扎克伯格简介 全球最年轻的亿万富豪
- 环球资讯:光载毫米波无线电通信技术现状介绍 光载毫米波无线电通信技术的发展
- 什么是频谱分析仪?频谱分析仪详情介绍 全球今热点
- 全球观速讯丨二进制转八进制的两种方法
- 世界热资讯!苹果作为市场上的主流手机有哪些维修点?苹果手机维修点查询
- 网文6个最好的免费在线音乐识别器——Shazam
- 接口测试工具——SoapUI下载安装教程
- 如何制作手机上网和多台电脑上WIFI?制作虚拟路由器免费WIFI方法-快消息
- windowsserver2012配置php环境的步骤
- 当前快看:电脑屏幕录像应该怎么操作?录制屏幕方法
- 帝尔复读机怎样?帝尔复读机价格性能介绍_焦点热议
- 博士音响好不好?博士音响品牌介绍:每日头条
- 海顿燃气壁挂炉好不好?海顿燃气壁挂炉优点介绍
- 稻盛和夫为什么值得学习?《干法》精华解读 世界聚看点
- 中国现在有多少家苹果零售店?苹果零售店在中国的发展历程
- 服务器遭遇DDoS攻击时会有哪些症状?DDos攻击的基本原理及症状
- 计算机b级英语翻译 英语B级考试翻译必备常用短句
- 每日资讯:什么叫电子邮箱?注册电子邮箱的方法有哪些?
- u盘和硬盘都需要建立文件系统吗?linux系统下创建文件系统
- 不可预料的压缩文件末端解决办法是什么?解决方法步骤_热点在线
- 【Bootstrap4】列表组的创建方法
- 努比亚Z17畅享版和Z17有什么区别?性能与双摄区别在哪?:焦点精选
- 速看:如何实现一个打点计时器?javascript打点计时器
- java爬虫框架介绍:Heritrix优势劣势
- 【科研必备】初中数学符号及读法大全(收藏版)
- 《自杀小队:战胜正义联盟》4人合作游玩演示视频-全球热议
- AMD R9 7945HX大放异彩 16核心打平Intel 24核心|焦点简讯
- 火影20周年作品《鸣人X博人究极忍者风暴连接》公布
- 个人辞职模板格式-个人辞职模板:天天看热讯
- 热门看点:百万英里 Cruise无人驾驶汽车达成里程碑
- 支持8K!凯宠TypeC线100瓦只要29.45元
- 全国有6亿栋房屋?飙上热搜!百亿新冠自测公司暴跌99.6%,曾是美国"第一"!企业月薪4万招人去养鸡…
- 《原子之心》PC平台性能分析:多种配置下流畅运行-环球今亮点
- 联想小新黑屏死机成投诉重灾区 QQ维权群已有近千人:动态焦点
- "姐夫"要回来啦!《守望先锋》原班人马组建新工作室
- Fami通新一周销量榜 《霍格沃茨之遗》继续登顶 环球热资讯
- 拒绝美式霸凌!Xbox称10年的COD合约派对大家都能参与
- 世界视点!B社确认三上真司即将离职:感谢他的贡献
- Fami通满分神作 《428:被封锁的涩谷》Steam 27元促销
- 每日消息!明基E540智能商务投影机 让我从此爱上开会!
- 首个香港直航山东旅游团来青,点名要去老城区看看 环球头条
- 《八方旅人2》发售倒计时1天!商人小队邀您上号游戏
- 徐工晒《流浪地球2》“化缘”记录 网友:一眼诈骗 当前快播
- 三上离开后动向猜测 可能成立一家中国投资的工作室
- 尼克尔Z 400mm f/4.5 VR S荣膺DPReview读者选择最佳定焦镜头奖
- 世界信息:《最后生还者》幕后花絮:乔尔骑的马竟然是假的!
- 《龙之谷》官宣将推出回忆服 首曝内容宣传片
- 雷蛇继续推出2023款灵刃15游戏本, i7+RTX 4060版卖19999元|全球今日报
- 【天天热闻】影驰星曜DDR5 6800MHz内存开售,纯白系列再添一员
- 硬核!为防95后员工摸鱼 山东一公司办公桌旁装监控-头条焦点
- 天天最新:《霍格沃茨之遗》或将有续作?华纳想打造成长期IP