关于原码、补码、反码的理解

补下基础 --

原码、补码、反码

-- 正数补码、反码都和原码一样, 符号位为0

-- 负数原码  符号位为1,其他位为 绝对值表示的二进制数

反码  原码符号位不变、其他位按位取反

补码 反码 + 1

反码的问题是 00000000 为0, 反码为 00000000

10000000 也为0, 反码为 11111111

这样0就有两个反码,   11111111 -127反码为 1000000

补码  反码 + 1 所以

10000000为0  反码为11111111 补码为反码+1 => 00000000

00000000为0 反码为00000000 补码为00000000

这样 0 的补码和反码是一样的,

而反码中 被0占用的 10000000

假设在补码中,10000000 被一个数占用了, 即10000000 如果是补码,则反码为01111111,

因为反码和原码的符号位相同,则该反码对应一个正数, 而正数对应的补码和原码一样,所以这里矛盾了,

10000000 这个补码被空出来的,不可能被【-127,127】之间的数占用,

故在补码中 把10000000 这个补码给了-128使用。

由此  补码的表示范围扩大了一个数 【-128, 127】

时间: 2024-11-06 23:15:35

关于原码、补码、反码的理解的相关文章

定点数表示方法——原码,补码,反码,移码

1. 真值和机器数 真值:数的实际值,用正负号和绝对值的某进制形式来表示,如+1010,-12,-FFFF等. 机器数:真值在计算机中的二进制表示,特点是符号数字化且数的大小受机器字长限制,其表示形式有原码,补码,反码,移码等. 2. 原码. 1). 定点小数: \[{x_{[{\rm{原}}]}} = \left\{ {\begin{array}{*{20}{l}}{x,0 \le x < 1}\\{{2^0} - x = {2^0} + \left| x \right|, - 1 < x

原码 补码 反码

一.原码 正数的原码就是它的本身 假设使用一个字节存储整数,整数10的原码是:0000 1010 负数用最高位是1表示负数 假设使用一个字节存储整数,整数-10的原码是:1000 1010 二.反码 正数的反码跟原码一样 假设使用一个字节存储整数,整数10的反码是:0000 1010 负数的反码是负数的原码按位取反(0变1,1变0),符号位不变 假设使用一个字节存储整数,整数-10的反码是:1111 0101 三.补码(再次强调,整数的补码才是在计算机中的存储形式.) 正数的补码和原码一样 假设

原码补码反码

#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <stdio.h> char stry[33] = { 0 }; char strf[33] = { 0 }; char strb[33] = { 0 }; void bcode(int num) { unsigned int data = 1 << 31;//左移31位 for (int i = 1; i <= 32; i++) { if (

JavaSE:命名规则、进制转换、原码补码反码、数据类型以及转换

1:关键字(掌握) (1)被Java语言赋予特定含义的单词 (2)特点: 全部小写. (3)注意事项: A:goto和const作为保留字存在. B:类似于Notepad++这样的高级记事本会对关键字有特殊颜色标记 2:标识符(掌握) (1)就是给类,接口,方法,变量等起名字的字符序列 (2)组成规则: A:英文大小写字母 B:数字 C:$和_ (3)注意事项: A:不能以数字开头 B:不能是java中的关键字 C:区分大小写 (4)常见的命名规则(见名知意) A:包 全部小写 单级包:小写 举

二进制的原码补码和反码

二进制的最高位为符号位,其中0表示正数,1表示负数: 正数的原码补码反码都是相同的: 负数的反码是负数的符号位不变,其余位取反(即1变0,0变1): 负数的补码是反码加1: 举例:计算机字长为八位,所以转换一下, 正一的原码:0000 0001 反码:0000 0001 补码:0000 0001 (均相同) 负一的原码:1000 0001(最高位的1表示为负数) 反码:1111 1110(最高位的符号位不变,其余取反) 补码:1111 1111(反码加一) 原文地址:https://www.cn

原码、反码、补码的理解与思考

原码.反码.补码都是二进制表示数的方式 原码原码:首位为符号位,0表示整数,1表示负数,其余位表示数值,例如0011表示+3,而1011表示-3.优点:符合人类阅读习惯,无论正数负数都能马上读出来缺点:计算机做运算的时候不会把符号位提取出来,然后单独计算数值位的,而是把整个数包括符号位一起参与运算,于是就导致了问题一:0011+1011=1110(-6)的错误计算结果.问题二:0存在着两种表示方式.正零和负零的问题0000(+0).1000(-0) 思考:如果世界上只有加法,没有减法:只有正数,

从计算机中数据类型的存储方式,思考理解原码,反码,补码

从计算机中数据类型的存储方式,思考理解原码,反码,补码 1. 数据类型 首先,我们知道,在C中,设计了两个类型的数据: 有符号数据类型 无符号数据类型 ==== signed & unsigned 打印方式: signed: %d, unsigned: %u 数据范围: signed: [-128, 127] unsigned: [0, 255] 2. 无符号数据类型 - 原码,反码,补码 在学习计算机的过程中,很快出现了:原码,反码,补码的概念.这里你肯定不会理解为什么要设计这个玩意儿的! 因

原码、反码、补码

原码.反码.补码,计算机中负数的表示 1.表示范围 拿单字节整数来说,无符号型,其表示范围是[0,255],总共表示了256个数据.有符号型,其表示范围是[-128,127]. 先看无符号,0表示为0000 0000,255表示为1111 1111,刚好满足了要求,可以表示256个数据. 再看有符号的,若是用原码表示,0表示为0000 000.因为咱们有符号,所以应该也有个负0(虽然它还是0):1000 0000. 那我们看看这样还能够满足我们的要求,表示256个数据么? 正数,没问题,127是

基础之——原码、反码、补码 详解

本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计

C语言之原码、反码和补码

原码.反码和补码 1).数据在内存中存储的时候都是以二进制的形式存储的. int num = 10; 原码.反码.补码都是二进制.只不过是二进制的不同的表现形式. 数据是以补码的二进制存储的. 2). 1个int类型的变量.在内存中占据4个字节, 32位. 00000000 00000000 00000000 00000000 在不考虑正负的情况下.1个int类型的变量可以表示接近43e种数据. 为了可以表示正负性.使用最高为来表示这个数的正负性. 如果最高为是0 那么表示这个数是1个正数 如果