首页 > 其他分享 >计算机补码存储

计算机补码存储

时间:2024-08-10 16:40:10浏览次数:10  
标签:表示 存储 0000 计算机 补码 1111 1000 0001

以下过程用8位的有符号char表示数据。

1. 计算机为什么用补码存储整数

  • 加法运行

计算机是按照二进制存储的,并且计算机只会做加法,不会减法。

 首先看下加法,例如1+1=2
     0000 0001
     0000 0001 
    ——————————
     0000 0010
 如果是1-1呢,因为计算机不会减法,会转换为1+(-1)。这就涉及到-1怎么表示了?如果用1000 0001表示-1进行如下计算
     0000 0001
     1000 0001
     —————————
     1000 0010    这个结果就表示-2,正确结果应该是0,说明这种表示方式不行。
  • 引入补码

针对该问题,计算机的前辈们想到用补码的形式表示整数(内存中存储也是存的补码),正数的补码和原码一样,负数的补码的非符号位取反后加1。

 按照这个规则,-1用补码表示为1000 0001(原码)——非符号为取反——>1111 1110——加1——>1111 1111.所以1+(-1)的计算过程如下:
      0000 0001
      1111 1111
      ——————————
      10000 0000     这个结果表示0,正确。

2.-128怎么表示

大家都知道char的取值范围是-128~127,但是-128怎么表示呢?我们按照上面的补码规则推算一下:

 1 1000 0000(用9位表示的原码)——非符号位取反——>1 0111 1111——加1——>1 1000 0000(补码)
 由上可知,原码 1 1000 0000对应的补码还是自身。截断溢出的最高位后是1000 0000。
如果只8位的1000 0000,有人可能会认为是表示-0,实际是已经用0000 0000表示0了,1000 0000再表示0就重复了,那就约定表示-128,而且这样表示不会引入错误(至于之前的大佬怎么想出来的,我暂时还不清楚),例如-128+64,计算过程如下:
 1000 0000
 0100 0000
 —————————
 1100 0000 (补码形式)——减1——>1011 1111——非符号位取反——>1100 0000(原码形式,表示-64)

3.在Linux环境下,如何用gdb查看某个变量在内存中是按照补码形式存储的呢

Image Name

如上图所示:
先用命令 p 查看变量val的内存地址,为0xffff1423.
再用命令 x 查看内存存储情况
x /4xb 0xffff1423
4:表示查看4个字节的内存.
x:表示内存数据显示的格式,和C语言中的printf保持一致.
b:表示内存单位大小 ,b:1个字节,h:Halfwords(2个字节),w:Words(4个字节).
如上图,变量val在内存中存储为"ff ff ff f6" 确实是-10的补码形式.

标签:表示,存储,0000,计算机,补码,1111,1000,0001
From: https://www.cnblogs.com/madadam/p/18352396

相关文章

  • 【Kubernetes】k8s集群存储卷(pvc存储卷)
    目录一.pvc存储卷1.PV2.PVC3.StorageClass4.PV和PVC的生命周期二.实战演练1.创建静态pv1.1.配置nfs1.2.创建pv1.3.创建pvc1.4.结合pod,将pv、pvc一起运行2.创建动态pv2.1.上传2.2.创建ServiceAccount,用来管理NFSProvisioner在k8s集群中运行的权限,设置nfs-......
  • springbootAl农作物病虫害预警系统-计算机毕业设计源码21875
    基于Vue+SpringBoot的Al农作物病虫害预警系统的设计与实现摘要随着农业现代化的推进,农作物病虫害的防治已成为农业生产中的重要环节。传统的病虫害防治方法往往依赖于农民的经验和观察,难以准确、及时地预测和防控病虫害的发生。因此,开发一种基于现代信息技术的农作物病虫......
  • springboot垂钓服务系统-计算机毕业设计源码17434
    摘要本文旨在针对垂钓爱好者的需求,基于微信小程序平台,设计并实现一套垂钓服务系统。首先,通过对用户需求进行调研和分析,确定了系统的基本功能模块,包括垂钓点信息展示、用户预约和支付、钓具租赁信息等。接着,借助微信小程序提供的开发框架和组件库,实现了系统的界面设计和交互功......
  • 计算机病毒:数字世界的隐形威胁
    在数字化时代,计算机病毒已成为我们不可忽视的隐形威胁。它们如同潜伏在数字世界中的幽灵,悄无声息地侵入我们的计算机系统,窃取信息、破坏数据,甚至瘫痪整个网络。了解计算机病毒的本质、传播方式及防御策略,对于保护我们的数字资产至关重要。计算机病毒的定义计算机病毒是一种......
  • 【计算机毕设论文】基于SpringBoot+Vue线上学习平台的设计与实现
    ......
  • 计算机毕业设计django+vue二手车辆管理系统【开题+论文+程序】
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着二手车市场的不断扩大和消费者需求的日益增长,二手车辆管理成为了一个日益重要的领域。然而,当前市场上的二手车辆管理往往存在信息不对......
  • django空巢老人志愿服务系统-计算机毕业设计源码58726
    基于Python的空巢老人志愿服务系统摘 要随着社会老龄化问题日益突出,空巢老人群体的关注和关怀日益重要。本研究设计并实现了基于Python的空巢老人志愿服务系统,旨在利用技术手段提供更多关爱和支持给空巢老人群体。该系统结合Python编程语言的灵活性和易用性,实现了慈善捐赠......
  • springboot 博客交流平台-计算机毕业设计源码56406
    摘要博客交流平台作为一种重要的网络平台,为用户提供了展示自我、分享经验和与他人互动的空间。在国内外,研究者们关注博客交流平台的各个方面,并取得了显著的进展。研究内容主要包括用户体验和界面设计、社交化和互动性、多媒体内容支持、移动设备适配和跨平台体验、数据分析......
  • C#高级:在SQLserver中使用视图和存储过程
    一、视图1.视图是什么,有什么作用?①一个虚拟表②简化查询2.视图和存储过程有什么区别?①视图:用于简化查询和数据展示②存储过程:用于执行一系列SQL语句,包含增删改查等,即业务逻辑得处理。3.建立一个视图,名为PersonBorrowView,SQL已给出: SELECTU.Name,BW.BoTime,BI.Bo......
  • Java计算机毕业设计基于Android的校园网上拍卖平台(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,特别是移动互联网的普及,校园生活也日益数字化、便捷化。在传统校园市场中,二手物品的交换与拍卖往往受限于时间、空间和信息......