以8b为例对比如下:(谁能给我补补课,说说为什么是正0负1,按照我的理解应该是正1负0更符合人类的思维,前者是进行了一次技术上的mapping了)
正号:0
负号:1
原码:
+1 0 000 0001
-1 1 000 0001
反码:
+1 ...
-1 1 111 1110
补码:
+1 ...
-1 1 111 1111
1+(-1)=0
0 000 0001
1 111 1111
------------
10 000 0000 = (+0)
而如果反过来就会是这样的:
正号:1
负号:0
原码:
+1 1 000 0001
-1 0 000 0001
反码:
+1 ...
-1 0 111 1110
补码:
+1 ...
-1 0 111 1111
1+(-1)=0
1 000 0001
0 111 1111
------------
10 000 0000 = (溢出位 8b考虑为 +0)
20090601:
相关链接:
http://dev.csdn.net/develop/article/17/17680.shtm
逆向推理:
先有正数运算,再有负数,才会产生有符号运算所遇到的问题。
按照离散数学的原理,需要解决的问题有两个:
1、负0怎样才能和正0具有相同的标志;
2、其他负数如何确定各自的标志;
3、运算规律是否可行;
下面给出我的推导过程及最后的公式,我觉得 原码和反码的转换公式要比以前我看到的教程简单很多。
一、拿二位10进制为例
可得排列组合(标志)为00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19 共计2*10^1 = 20 个数,为正数1~9 、 0 、和负数10个。(因为正数和0在负数概念出现以前已经确定,所以剩下的数为负数)。
二、拿二位2进制为例
同理有标志00 01 10 11,00为+0,01为+1,推理另两个标志对应的负数。
结论
:
同样的方法可以放到三位二进制 ,四位二进制等,表示为x位n进制可得到公式:
负数原码和补码的转换公式:
1v = -(n^(x-1)-v)
放到8位2进制即:
1v=-(2^7-v)
代入8位二进制即使
1000 0000 = - (2^7-0)= -128;
1000 0001 = -(2^7-1) = -127;
1000 0002 = -(2^7-2) = -126;
...
1111 1111 = -(2^7-(2^7-1)) = -1;
"-1就是减1嘛,想一想00000000减去1应该是多少呢,不够就借位,那就是11111111"
这句话同样体现了前提:不破坏先前的正数(包括0)的运算法则。
总
结:那些计算机教材写得真垃圾啊,就这么简单的问题搞锤子求反+1 ,基本上无逻辑可言。
结合离散等数学知识,这个问题是不是可以延伸到内存寻址等相关方面呢?
分享到:
- 2007-06-06 23:03
- 浏览 15042
- 评论(16)
- 论坛回复 / 浏览 (16 / 19947)
- 查看更多
相关推荐
在计算机中,整数可以被表示为二进制的正数或负数。对于负数,通常使用补码表示法。补码表示法是将一个正数的二进制形式按位取反(即0变成1,1变成0),然后加1,得到该数的负值表示。例如,十进制数-3的二进制补码...
1. 符号位(Sign Bit):1位,0代表正数,1代表负数。 2. 指数部分(Exponent):8位,采用偏移量(bias)表示,偏移量为127,即指数实际值 = 表示的二进制值 - 127。 3. 尾数部分(Fraction):23位,包含隐藏的1,...
二进制多字节定点数运算是计算机科学中一个基础且重要的概念,特别是在数字系统设计、嵌入式系统以及计算硬件领域。定点数是相对于浮点数而言的,它们在存储时固定占据一定的位宽,通常用于表示整数或带有小数点的...
1. 符号位:1位,0代表正数,1代表负数。 2. 指数:8位(单精度)或11位(双精度),存储的是偏移指数,而非实际指数值。 3. 尾数:23位(单精度)或52位(双精度),存储的是浮点数的小数部分,通常不包含隐藏的...
当按二、八、十六进制输出时,是按其补码形式输出,最高位是符号位(正数为0、负数为1)。 所以此法可得到一个负数的补码表示。 (1)按二进制输出 %b或%B %b等价与%B。 %b 12 = 0b1100 %b 0xffffffff = 0b1111 ...
对于负数,其补码表示可以视为其绝对值的二进制表示取反后再加1。例如,负19的补码为1110 1100,这是从负19的原码1001 0011取反后得到1110 1100,再加1得到的。补码的运算规则简单且统一,无论加法还是减法,都可以...
IEEE 745标准,也称为IEEE 754-1985,是国际电工委员会(IEEE)制定的一套关于浮点数运算的标准,它定义了如何用二进制表示单精度(32位)和双精度(64位)浮点数。 在32位的IEEE 745标准中,一个浮点数被分为三个...
补码是计算机内部表示带符号整数(即可以表示正数和负数)的一种方法。它的主要优点是可以简化加法和减法运算,并且可以统一处理正数和负数。 #### 补码的计算方法 对于一个 n 位的二进制数,其补码的计算方法如下...
其中,符号位0代表正数,1代表负数;指数部分是偏移量,用于表示实际的指数值;尾数部分是小数部分,通常以1.的形式表示,即1.s1s2...sm,其中s1到sm是尾数的二进制位。 二、十进制浮点数转二进制浮点数 1. 将十...
例如:数字6在计算机中原码表示为:00000110,其中,第一个数字0是符号位,0表示正数,0000110是数字6的二进制数据表示。数字(-6)在计算机中原码表示为:10000110。 原码的缺陷 原码有一个很大的缺陷,那就是在带...
假设我们使用32位的int类型,那么+3的二进制形式为***,符号位为0表示这是一个正数。-3的补码则是在+3的基础上求取反码(每一位取反),然后加1得到。 将十进制的-3转换为二进制补码的步骤如下: 1. 将-3的绝对值3...
数的机器码表示在计算机中至关重要,无符号数只表示正数,而带符号数则可以表示正数和负数。机器码通常有原码、反码和补码三种形式,其中最高位作为符号位,0代表正,1代表负。 总的来说,这一章涵盖了数据的表示、...
1. 二进制补码:计算机内部存储和运算均基于二进制,整数通常采用补码表示。补码是将正数的原码直接作为其补码,负数的原码除符号位外取反再加1。这种表示方式使得加法和减法操作可以统一处理,简化了硬件设计。 2....
本章主要探讨了计算机中不同数制的概念,包括进位计数制、数制间的转换、二进制编码、二进制数的运算、数的定点和浮点表示以及带符号数的表示法。 首先,进位计数制是计数的基本方式,其中基数表示数制中可用的数码...
二进制是最基础的,由0和1组成,八进制由0-7的数字表示,十进制是我们日常使用的计数系统,而十六进制则使用0-9和A-F来表示。不同数制之间的转换通过特定的规则进行,例如二进制转十进制可以通过权重求和,二进制转...
1. **符号位**:浮点数的第一个位用于表示正负,0代表正数,1代表负数。在32位浮点数中,它位于最高位;在64位浮点数中,同样如此。 2. **指数部分**:接下来的部分表示指数,它是偏移量(bias),而非实际的指数值...
1. **原码**:原码是最直观的表示方法,其中最高位(符号位)为0表示正数,为1表示负数。其余位(数值位)直接对应于该数值的二进制形式。例如,+85的原码为01010101,而-85的原码为11010101。对于0,有两种原码表示...
在实际的计算机系统中,带符号数通常以补码形式存储和运算,这是因为补码可以方便地实现加法、减法,并且能够正确表示最大和最小的整数值,如在8位二进制系统中,可以表示-128到+127的整数范围。 总之,理解和掌握...
在计算机中,如果数值运算导致结果超过了可用位数能表示的最大值,就会从结果中减去一个“模”,这个模通常是2的位数次方减1,对于8位二进制来说,模是255。 在8位二进制原码中,可以表示的数值范围是+127到-127。...
计算机内部主要使用二进制(Binary)表示数据,因为二进制只包含0和1两个数字,易于电子元件的物理实现。然而,为了方便人类交流,我们通常使用十进制(Decimal)、八进制(Octal)和十六进制(Hexadecimal)这三种...