计算机内存数值存储方式-原码、反码、补码、数值溢出

2023-11-19

计算机内存数值存储方式

1、原码
一个数的原码(原始的二进制码)有如下特点:

①最高位做为符号位,0表示正,为1表示负
②其它数值部分就是数值本身绝对值的二进制数
③负数的原码是在其绝对值的基础上,最高位变为1

下面数值以1字节的大小描述:
在这里插入图片描述
原码表示法简单易懂,与带符号数本身转换方便,只要符号还原即可,但当两个正数相减或不同符号数相加时,必须比较两个数哪个绝对值大,才能决定谁减谁,才能确定结果是正还是负,所以原码不便于加减运算。

2、 反码
①对于正数,反码与原码相同
②对于负数,符号位不变,其它部分取反(1变0,0变1)
在这里插入图片描述
反码运算也不方便,通常用来作为求补码的中间过渡。

3、补码

在计算机系统中,数值一律用补码来存储。

补码特点:
①对于正数,原码、反码、补码相同
②对于负数,其补码为它的反码加1
③补码符号位不动,其他位求反,最后整个数加1,得到原码
在这里插入图片描述

#include <stdio.h>

int main()
{
	int  a = -15;

	printf("%x\n", a);
	//结果为 fffffff1
	//fffffff1对应的二进制:1111 1111 1111 1111 1111 1111 1111 0001
	//符号位不变,其它取反:1000 0000 0000 0000 0000 0000 0000 1110
	//上面加1:1000 0000 0000 0000 0000 0000 0000 1111  最高位1代表负数,就是-15

	return 0;
}

4、补码的意义
示例1:用8位二进制数分别表示+0和-0
在这里插入图片描述
不管以原码方式存储,还是以反码方式存储,0也有两种表示形式。为什么同样一个0有两种不同的表示方法呢?

但是如果以补码方式存储,补码统一了零的编码:
在这里插入图片描述

示例2:计算9 - 6的结果
以原码方式相加:
在这里插入图片描述
以补码方式相加:
在这里插入图片描述
最高位的1溢出,剩余8位二进制表示的是3,正确。

在计算机系统中,数值一律用补码来存储,主要原因是:
①统一了零的编码
②将符号位和其它位统一处理
③将减法运算转变为加法运算
④两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃

数值溢出

当超过一个数据类型能够存放最大的范围时,数值会溢出。

有符号位最高位溢出的区别:符号位溢出会导致数的正负发生改变,但最高位的溢出会导致最高位丢失。
在这里插入图片描述

#include <stdio.h>

int main()
{
	char ch;

	//符号位溢出会导致数的正负发生改变
	ch = 0x7f + 2; 
	//0x7f + 2;补码表示为 0b 0111 1111 +2 --> +2后 1000 0001,这是负数补码,其原码为 1111 1111,结果为-127                             
	//计算机中数值以补码形式存在,最高位为1表示是负数,需要将补码转换成原码,才能知道该数表示的值为多少
	printf("%d\n", ch); //结果为-127   
	
	
	//最高位的溢出会导致最高位丢失
	unsigned char ch2;
	ch2 = 0xff+1; //255+1
	//0xff的二进制形式为 1111 1111 --> +1后 10000 0000, char只有8位,导致最高位溢出,结果为0000 0000,结果为十进制为0
	printf("%u\n", ch2);
	

	ch2 = 0xff + 2; //255+2
	printf("%u\n", ch2);
	//0xff 的二进制为 1111 1111
	//+2后 1 0000 0001, char只有8位,最高位溢出,结果为0000 0001,结果为十进制为1

	return 0;
}

总结

  • 数值溢出
    • 有符号数溢出,修改符号位

    • 无符号数溢出,丢失最高位

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机内存数值存储方式-原码、反码、补码、数值溢出 的相关文章

随机推荐

  • 怎么通过SPSS的神经网络模型预测结果

    神经网络模型是数据分析常用的模型 它广泛应用于众多领域 比如 医疗 人工智能 深度学习 语音 机器人等 它能通过现有数据经过神经网络模型训练得到训练模型 再将模型运用于预测数据集 进而得到预测结果 并且将预测趋势应用于各个领域 IBM SP
  • 元字符的详细解析

    上一篇文章介绍了正则的用处以及正则中这些元字符的基本含义 但是如果我们只知道那些元字符的含义 不知道怎么使用和加以练习 那么对于正则我们还只是看见了门槛 并没有踏入 那么本篇文章就让我们迈起脚步正式走入正则的世界吧 let s go 我的学
  • 714阿里巴巴模拟面试

    介绍一下数据库分页 https www nowcoder com questionTerminal 3577280c810546658f06f19c01ff0345 给定一棵树 求出这棵树的直径 即两个节点距离的最大值 应该是左右子树遍历深
  • Combox的GetLBText();遇到的问题和解决方法

    最近有个项目要结束但是测试的时候发现一个问题 就是点击Combox的时候偶尔出现程序卡死 找了半天最后定位到GetLBText 的函数上 发现当你在选择索引或者Combox获得焦点的时候GetLBText都会执行到 正常的值肯定没有我问题
  • linux下安装awk

    sudo apt get install gawk 注意名称
  • Linux环境下 通过V4L2读取视频+UDP发送图片文件

    该图为整个项目的流程图 其中左边的流程为总流程 包括通过中断读取摄像头的帧数据 通过内存映射将内核态的数据映射到用户态 读取用户态的数据 采用循环发送图片数据 右边是发送图片的流程图 将用户态的缓冲区的数据通过内存映射到用户态 通过内存拷贝
  • java学习记录之JVM篇

    垃圾标记 gt 根可达 垃圾回收算法 复制算法 标记清除 标记整理 普通GC Minor GC 只针对新生代 新生代对象大多存活不高 垃圾回收频繁 回收速度较快 Full GC 全局gc 针对老年代 可能会伴随普通gc 速度较慢 回收算法有
  • window系统消失的c盘,实际占用与显示占用相差好多G

    问题 C盘一直显示的红色提醒 我c盘实际占用的空间只有33 1GB 而我的c盘总共大小是59 9GB 显示的剩余大小是1 35GB 也就是说我占用了58 11 和c盘的总文件大小相差了25GB 那么消失的25GB去了哪里 我百度过这个问题
  • 如何用微信自动添加wifi连接服务器地址,微信服务号如何实现扫码自动连接WIFI?详细步骤介绍!...

    微信服务号如何实现扫码自动连接WIFI 详细步骤介绍 有的朋友在运营这个微信公众号的时候 会想着如果有更多人关注自己的运营号就好了 但有的朋友没有找到好的办法 不知道如何吸引更多人的关注 下面小编给大家提供一个思路 就是当大家在关注微信公众
  • 移动端证件识别OCR

    证件识别利用的是ocr识别原理 也就是光学字符识别 证件识别方法有很多 先说第一种 用一个读港澳通行证的仪器就行 而且连上系统还能直接把信息导出成EXCEL文档 其实这个仪器叫做证件识别仪 可以识别护照 港澳通行证 台胞证 身份证 驾驶证
  • python pyplot logscale 画图对数

    原文来自公众号 工程师看海 事情的起因是我要在公众号 工程师看海 更新一篇文章 介绍电感 磁珠的区别 需要画阻抗 频率曲线 横坐标频率要按照log对数尺度缩放 就写了python代码 废话不多说 先看结果 公众号后台回复 python lo
  • 【Xilinx DDR3 MIG】Xilinx FPGA DDR3读写实验相关用户接口引脚解释

    目录 DDR3读写实验 实验框图 时钟模块 DDR3读写及LED指示模块 MIG IP核 用户接口解释
  • Python自定义异常 Python Custom Exception

    个人主页 Aurora 如果文章有什么需要改进的地方还请各位大佬指正 如果我的文章对你有帮助 关注 点赞 收藏 一 python自定义异常 1 自定义一个CustomException类 继承Exception类 2 编写CustomExc
  • cur.execute(sql,args)和cur.execute(sql)的区别

    python代码示例 方式一 userid 123 sql select id name from user where id s userid cur execute sql 方式二 sql语句模板中的参数填充符是 s 而不是 s 且多个
  • Linux上开发常见问题整理

    Linux上开发常见问题整理 1 java工程在linux上运行测试 首先要有一个main方法作为主类 程序的入口 右键 gt Run As gt javaapplication生成配置文件入口 右键该工程 gt Export gt Run
  • LaTeX 多行公式、公式对齐以及输入矩阵的方法

    一 LaTex显示 大括号连接的 多行公式 公式组合 使用cases环境实现公式的组合 分隔公式和条件 具体LaTex代码如下 D x begin cases lim limits x to 0 frac a x b c x lt 3 pi
  • tshark 解析pcap中带TLS协议的数据包

    tshark的简单用法参考 tshark解析本地pcap数据包提取五元组 src ip src port proto dst ip dst port 与时间戳 包长 详细用法 官方DOC 比如提取一个数据包 my pcap 中全部带有TLS
  • Oracle数据恢复:强制Resetlogs的可能数据损失

    Oracle数据恢复 强制Resetlogs的可能数据损失 Oracle数据恢复 格式化 ASM及字典损坏案例三则 ORA 00600 kcratr nab less than odr案例一则 SMON recover undo segme
  • 简易DOCKER/K8S使用心得

    1 DOCKER安装 1 1 前置环境 首先 如果使用CentOS 你至少需要7 4以上 从内核角度来说 建议使用8 2及以上 如果是7 4以下的版本 可以通过设置仓库到7 4以上版本 再 yum install centos releas
  • 计算机内存数值存储方式-原码、反码、补码、数值溢出

    计算机内存数值存储方式 1 原码 一个数的原码 原始的二进制码 有如下特点 最高位做为符号位 0表示正 为1表示负 其它数值部分就是数值本身绝对值的二进制数 负数的原码是在其绝对值的基础上 最高位变为1 下面数值以1字节的大小描述 原码表示