模,原码,补码,反码
模、原码和补码
在实际生活中,如果一个物体在正北方向30度,把该物体顺时针旋转100度,和把这个物体逆时针旋转260度得到的效果是一样的。再比如说钟表,时针从2点走11个单位,和逆时针走1个单位的位置是一样的。这两个例子有个共同的特点,物体和时针都被限制在了一定的范围内,想要取到一个位置,都有两种方式。
- 第一个例子中30 + 100 的位置与 30 - (360 - 100)的位置是一样的。
- 第二个例子中,2 + 11并没有等于13,而是等于1,因为超过了一定范围以后,就会将计算结果减去这个“一定范围”的整数倍,使最终结果控制在这个范围里面。所以2 + 11与 2 - (12-11)的时钟位置是一样的。
类比这两个例子,可以理解计算机中模的概念。例子中的“一定范围”就是模。两个例子里面的100与360-100的关系、11与12-11的关系就相当于计算机中的原码和补码。
举例:
在第一个例子中,-30度可以表示为360-30度。那么同样,在计算机中,一个8位的二进制数的模就是 1 0000 0000(2^8=256)。-3可以表示为256-3。
- -3的原码是
10000011
- 3的原码是
00000011
- -3=256-3表示为
1 00000000 - 00000011 = 11111101
11111101
就是-3的补码。
得到的结果11111101
就被叫做-3的补码,10000011(-3的原码)
和11111101(-3的补码)
就相当于-30度与330度的关系,虽然长得不一样,但是在二进制计算中表达的意义是一样的。这样11111101
就可以代替10000011
(-3的源码)进行计算机中的二进制计算。
补码存在的意义
反码的存在可以让计算机表示十进制中的负数,并且可以让计算机在运算时只做加法不做减法。
例如:10-3 = 10 + (-3)
在模的范围里,一个数本身与其补码具有相同的意义。在实际计算10+(-3)
时相当于10的原码 + (-3的补码)
的过程。(如果此时你有个疑问,为什么不直接用-3的源码来计算10+(-3),看了下面负数的原码的定义就知道了。)
负数的原码
八位二进制数0000 0000 ~1111 1111
,一共可以表示2^8=256位数。如果想要表示有符号整数,就要将最前面一个二进制位作为符号位,即0代表正数,1代表负数,后面7位为数值域,这就是原码定义。
这也就是为什么8位的二进制能表示十进制数的范围是
-128~+127
。而计算机在计算负数的加法不能用负数的源码计算也是因为原码定义。例如上面的
10+(-3)
,不能用-3
的源码计算,是因为-3
的原码与3
的原码只差了一个符号位,数值部分其实是和3
,这样计算的结果显然是不对的,所以要求-3的补码
,用补码来进行计算。负数在计算机计算时,都是使用其补码来进运算的。
反码
原码的符号位不变,二进制取反得到结果,只是计算机为了计算补码时的一个中间量。
各种码的计算方法
- 原码:符号位加上真实数值的绝对值的二进制, 即用第一位表示符号, 其余位表示数值。
- 反码:正数的反码是其本身;负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
- 补码:正数的补码就是其本身;负数的补码是在反码的基础上+1。
上面例子中提到的求补码的方法是,用模的值减去负数的绝对值,那个模对应的二进制
1 0000 0000
是9位的,而8位的二进制是无法表示这个模的。计算机计算补码的真正办法是将原码的符号位不变,二进制取反加1。
模,原码,补码,反码相关推荐
- 计算机组成原理:原码,补码,反码,移码
无符号数 寄存器的位数反映和决定无符号数的表示范围 比如八位的寄存器就只能储存十进制的0-255 有符号数 机器数与真值 在计算机当中没有硬件表示小数点的位置,而小数点的位置是我们自己约定的, 小数的 ...
- java反码补码原码作用_java原码补码反码关系解析
本文为大家解析了java原码补码反码的关系,供大家参考,具体内容如下 原码:不管源数据是十进制还是十六进制,统统将数字转成二进制形式 反码:把原码的二进制统统反过来,0变成1,1变成0 补码:负数的反 ...
- 真值 原码 补码 反码 移码
真值 原码 补码 反码 移码 真值是相对与其它四种的数字类型 书写中一般表示的数叫做"真值" 机器中编码表示的数 "机器数||机器码<原码 补码 反码 移码 > ...
- 原码 补码 反码的转换
正数 : 原码 补码 反码都相同 机器数:+1001010 原码:01001010 (符号位 正数为0) 补码:01001010 (补码与原码相同) 反码:01001010 (反码与原码相同) 负数 ...
- 原码 补码 反码 移码
目录 原码 反码 补码 移码 转换 原码 补码 反码 原码 0和1组成 正负用0和1表示(添加在最前面) 真值转原码 转化符号位 数值位十进制转二进制 对于十进制数 233(正数) 正数->符号 ...
- 计算机组成原理之 原码 补码 反码
原码 补码 反码 前言 一.有符号数 1.1原码 补码 反码 总结 前言 在计算机中一般使用二进制表示各个有理数.在计算机中参与运算的数有两大类:有符号数和无符号数.无符号数就是没有符号的数,在寄存器 ...
- c语言原码 补码 反码,C语言 原码--反码--补码
//原码,反码,补码 #include #include //数值的表示方法--原码.反码和补码 //原码:最高位为符号位,其余各位为数值本身的绝对值 //反码: //正数:反码与原码相同 //负数: ...
- 16位二进制补码 c语言,2,16进制原码补码反码问题
1. 在计算机里,通常用数字后面紧跟一个英文字母来表示该数的数字, 十进制一般用D,二进制用B,八进制用O,十六进用H来表示, 2. 首先,十进制数转换成二进制,除2取余,按箭头方向写,自上而下写出来 ...
- java部分基础知识 (二):计算机组成原理 原码 补码 反码 按位符 移位符 按位与 按位或 按位抑或 非 分析hashMap的put方法原理
这里写目录标题 引言 符号位 正数的二进制计算 负数的二进制计算 按位符和移位符 按位符 移位符 分析hashMap运算符 byte和char 总结 引言 最近做完一个项目后,我忽然发现自己的基础并不 ...
- C语言中 真值/原码/补码/反码 的概念
这里我们以十进制数+12和-12为例,解释C语言中的 真值.原码.补码.反码 概念.先来一点补充前提: - C语言中,数字有 int.float.double类型,占内存分别为2.4.8个字节.这里我 ...
最新文章
- LAMP一体环境快速安装
- VS怎样创建和使用lib文件
- Okhttp-interceptor源码分析,快上车!
- request如何setParamter
- 敏捷项目管理过程改进
- 问题记录-python连接远程主机redis数据库时无法成功连接
- Java学习笔记2.6.2 数组 - 二维数组
- 记录开发移动端项目过程中的各种问题、插件及教程(不定时更新)
- Apache启动失败
- ORA-12514: TNS:listener does not currently know of service …
- ubuntu安装 VMware Tools
- UML——实现图(构件图与部署图)
- NUKE 10 mac破解版影视特效制作软件,你也可以制作大片一样的影视效果!
- c语言标准库函数大全用法,C 标准库函数
- php url 转码,php url中文转码的方法
- php 数字转换为字符串,PHP-将数字转换为Excel的字符串
- matlab 虚数实部,为什么圆的面积等于4圆周率R的平方,体积等于43圆周率R的立方?-matlab虚数-数学-厍抛粕同学...
- 微信小程序播放视频卡顿问题
- python 排名函数_分数排名(Python),成绩,排序,python
- 简明 Vim 练级攻略(转自酷壳)
热门文章
- Linux比较常用的终端快捷键使用
- Windows系统完全卸载删除 Node.js
- 【SpringMVC】@RequestMapping和@GetMapping的区别
- UVA - 10118 Free Candies 记忆化搜索
- python爬虫案例分析:爬取肯德基门店地址数据导入csv文件并最终用excel文档呈现
- 算法——递归与递推[蓝桥杯]
- (HTTP代理与socket5)客户端访问,服务器处理步骤
- 2021_lg_03.SQL实战:如何用sql计算用户留存问题
- Nginx配置 转发URL中包含特殊字符
- java到底能干嘛?