补码中关于-32768的问题
从二进制的原码说起:
如果以最高位为符号位,二进制原码最大为0111111111111111=2的15次方减1=32767最小为1111111111111111=-2的15次方减1=-32767此时0有两种表现方法,即正0和负0:0000000000000000=1000000000000000=0
所以,二进制原码表现时,范围是-32767~-0和0~32767,因为有两个零的存在,所以不同的数值个数一共只有2的16次方减1个,比16位二进制可以提供的2的16次方个编码少1个。
但是计算机中采取二进制补码存储数据,即正数编码稳定,从0000000000000000到0111111111111111依旧表现0到32767,而负数需要把除符号位当前的部分取反加1,即-32767的补码为1000000000000001。
到此,再来看原码的正0和负0:0000000000000000和1000000000000000,补码表现中,前者的补码还是0000000000000000,后者经过非符号位取反加1后,同样酿成了0000000000000000,也就是正0和负0在补码系统中的编码是一样的。
但是,我们知道,16位二进制数可以表现2的16次方个编码,而在补码中零的编码只有一个,也就是补码中会比原码多一个编码出来,这个编码就是1000000000000000,因为任何一个原码都不可能在转成补码时酿成1000000000000000。
所以,人为规定1000000000000000这个补码编码为-32768。所以,补码系统中,范围是-32768~32767。
因此,实际上,二进制的最小数确实是1111111111111111,只是二进制补码的最小值才是1000000000000000,而补码的1111111111111111是二进制值的-1。
注:
以补码形式来运算的话,设计的逻辑电路会简单很多,会少很多逻辑运算器件,所以计算机采用补码的形式来运算。
补码中关于-32768的问题相关推荐
- 原码、反码、补码问题以及-32768~+32767问题
原码.反码.补码问题以及-32768~+32767问题 1. 原码.反码.补码问题 在C语言中,对于有符号整形数,原码的最高位为符号位,符号位为0表示正数,符号位为1表示负数,仅用原码来表示数是没有 ...
- 补码中的+0和-0为什么机器码相同?
接着上文来说,借助同余的概念,我们引入了补码. 对于原码和反码来说,+0和-0的机器码由不同的二进制串表示. 原码: +0:00000000 -0:10000000 反码: +0:00000000 - ...
- C语言中short整型数据的范围-32768----32767是中的-32768是如何确定的
short整形在32位PC上是2个字节表示的,每个字节是8个二进制比特,一共就是16个比特 16个比特,能表示的数的个数是 0 - 2^16-1,即0 - 65535共65536个,如果表示正负整数各 ...
- 关于-32768补码的问题
首先要知道的是计算机中补码的表示是唯一且连续的!我想这是计算机为什么不用原码来表示的一个原因!另外,以补码形式来运算的话,设计的逻辑电路会简单很多,会少很多逻辑运算器件,所以计算机采用补码的形式来运算 ...
- (原码反码补码的计算)在一个8位的二进制的机器中,补码表示的整数范围是从_(1)_(小)到_(2)_(大)。这两个数在机器中的补码表示为_(3)_(小)到_(4)_(大)。数0的补码为_(5)_。
https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 目录 题目 分析过 ...
- 计算机中的原码,计算机中的原码反码补码移码
计算机中的原码反码补码移码 原码 数值 X 的原码记为 [X]原,如果机器字长为 n (即采用 n 个二进制位表示数据),则最高位是符号位,0 表示正号,1 表示负号,基余的 n~1 位表示数值的绝对 ...
- c语言补码计算方法,探讨C语言学习中补码计算方法.doc
探讨C语言学习中补码计算方法 探讨C语言学习中补码计算方法 摘要:补码是C语言学习中的一个重点和难点,如何能够快速准确地计算出各个数的补码值得我们探讨.本文从补码的意义入手,采用逆向逻辑思维,分别提出 ...
- 关于补码移码各自和原码的联系、来历、功能及I EEE754标准中移码范围问题
最近在学习计算机组成原理时,遇到一些问题,记录在此. 如果你对下面这段话有疑惑或者兴趣,我或许能说点什么你感兴趣的. 真值-128的补码:1000 0000,这个补码本身表示的二进制数(无符号)是12 ...
- c语言相反数补码,C语言中补码的整数运算特性
前言 本篇博客以"SSD6-Exercise2-Data Lab: Manipulating Bits"为例,分析在对C语言中的整数采用补码(two's-complement)编码 ...
- 有符号类型的最小负数的补码的由来
有符号类型的最小负数的补码的由来 一. 16位的有符号整数(int) 在计算机中是用补码存储数据 为什么不用原码存 就是因为原码表示不了最小值-32768 如果是原码表示的话,编码中+0是用16个0表 ...
最新文章
- C++实现求数组中前K大的数
- java 数组json_如何在Java中创建JSON数组
- Sublime Text3 如何安装、删除及更新插件
- boos::reverse_iterator相关的测试程序
- RabbitMQ延迟消费和重复消费
- 单独运行shell脚本与crontab运行shell脚本的区别
- python中函数和类的区别_Python中函数和方法的区别
- 为什么软件测试容易被小看,做软件测试容易忽视的问题
- 如何套用模板绘制生产管理流程图
- Eclipse用法与技巧——导入工程时报错(already exist in the workspace)
- discard python_Python学习第三天
- linux安装jdk1.8之后报错Error: dl failure on line 893的解决办法
- FFmpeg的下载及其简单使用
- bat windows10系统垃圾清理---
- 十年游戏建模师给想学次世代游戏建模同学的一些忠告,太受益了
- haproxy编译安装以及配置文档介绍
- Revo Uninstaller快捷键命令
- java根据生日判断生日和星座
- visionpro的无脚本和高级脚本(你要偷偷的卷,然后惊艳所有人)
- oracle 索引的创建和生效