有符号数与无符号数
数字逻辑与计算机组成原理:第二章 数据的表示与运算

第二章 数据的表示与运算
第一节 数的表示
一、无符号数和有符号数
1、无符号数:
没有符号的数,寄存器中的每一位都可用 来存放数据
机器字长为n位,无符号数的表示范围 为0~2n-1
反映无符号数的表示范围
8位 16 位
0 ~ 255 0 ~ 65535
有两种常用的无符号表示法: ◆ 非负数码:表示0或一个正数
(1) 定义
整数
0,x
2n > x ≥ 0
[x]反 = ( 2n+1 – 1) + x 0 ≥ x > 2n(mod 2n+1 1)
x 为真值
n 为整数的位数
如 x = +1101
x = 1101
[x]反 = 0,1101
[x]反 = (24+1 1) 1101 = 11111 1101
用 逗号 将符号位
= 1,0010
和数值部分隔开
小数 x
[x]反 = ( 2 – 2-n) + x
1>x≥ 0 0 ≥ x > 1(mod 2 2-n)
x 为真值 n 为小数的位数
如 x = + 0.1101
x = 0.1010
[x]反 = 0.1101
[x]反 = (2 2-4) 0.1010
= 1.1111 0.1010
有符号小数: +0.1011,在机器中表示为
-0.1011,在机器中表示为
第一节 数的表示
一、无符号数和有符号数 2、有符号数
有符号整数: +1101,机器中表示为
-1101, 机器中表示为
第一节 数的表示
一、无符号数和有符号数
c语言有符号与无符号数运算隐式转换

c语言有符号与无符号数运算隐式转换
在C语言中,有符号数与无符号数进行运算时会发生隐式类型转换。
具体的规则如下:
1. 当有符号数与无符号数进行运算时,有符号数会自动转换为无符号数进行计算。
这是因为在计算过程中,C语言会默认将有符号数的最高位视为符号位,而无符号数没有符号位。
2. 如果有符号数的值大于等于0,那么它会被当作无符号数进行计算;如果有符号数的值小于0,那么它会被转换为无符号数,然后再进行计算。
3. 当有符号数和无符号数进行混合运算时,C语言会将有符号数转换为无符号数的类型,然后进行计算。
需要注意的是,在进行有符号数和无符号数运算时,可能会出现一些意外的结果。
例如:
```c
int a = -1;
unsigned int b = 1;
printf("%x\n", a + b);
```
输出结果为`0`,这是因为-1被转换为了无符号数进行计算,而无符号整数不能表示负数,所以结果会出现一些意外情况。
为了避免这种情况,我们应该尽量避免在有符号数和无符号数
之间进行运算,以免造成错误的结果。
如果确实需要进行这样的转换,我们可以使用显式类型转换来明确指定运算的类型。
计算机组成原理_计算机的运算方法_61 无符号数和有符号数_

6.1 无符号数和有符号数寄存器的位数反映无符号数的表示范围8 位 0 ~ 255 16 位 0 ~ 65535带符号的数 符号数字化的数+ 0.101101011小数点的位置+ 110001100小数点的位置– 110011100小数点的位置– 0.101111011小数点的位置真值 机器数1. 机器数与真值2. 原码表示法—整数带符号的绝对值表示x 为真值n 为整数的位数如x = +1110[x ]原 = 0 , 1110[x ]原 = 24 + 1110 = 1 , 1110 x =1110[x ]原 = 0,x 2n> x ≥ 02n x 0 ≥ x > 2n用 逗号 将符号位和数值部分隔开x 为真值如x = + 0.1101[x ]原 = 0 . 1101x = – 0.1101[x ]原 = 1 – (–0.1101) = 1 . 1101x 1 > x ≥ 0[x ]原 =1 – x 0 ≥ x >–1x = – 0.1000000[x ]原 = 1 – (– 0.1000000) = 1 . 1000000x = + 0.1000000[x ]原 = 0 . 1000000用 小数点 将符号位和数值部分隔开用 小数点 将符号位和数值部分隔开2. 原码表示法—小数例 6.1 已知 [x ]原 = 1.0011 求 x 解:例 6.2 已知 [x ]原 = 1,1100 求 x 解:x = 1 – [x ]原 = 1 –1.0011 = –0.0011x = 24 – [x ]原 = 10000 – 1,1100 = –1100– –0.0011 1100由定义得由定义得例 6.4 求 x = 0 的原码解:设 x = +0.0000例 6.3 已知 [x ]原 = 0.1101 求 x解:x = + 0.1101同理,对于整数[+ 0]原 = 0,0000[+0.0000]原 = 0.0000x =0.0000[0.0000]原 = 1.0000[ 0]原 = 1,0000∴ [+0]原 ≠ [0]原根据 定义原码的特点:简单、直观但是用原码作加法时,会出现如下问题:能否 只作加法 ?找到一个与负数等价的正数 来代替这个负数就可使 减 加加法 正 正加加法 正 负加法 负 正加法 负 负减减加要求 数1 数2 实际操作 结果符号正可正可负可正可负负无符号数原码表示(整数)机器数与真值原码表示(小数)6.1 无符号数和有符号数。
计算机中数的表示和存储(总结)

计算机中数的表⽰和存储(总结)⼀、⽆符号数和有符号数1.⽆符号数计算机中的数均存放在寄存器中,通常称寄存器的位数为机器字长。
所谓的⽆符号数即没有符号的数,在寄存器中的每⼀位均可⽤来存放数值。
⽽当存放有符号位时,则留出位置存放“符号”。
因此,在机器字长相同时,⽆符号数与有符号数所对应的数值范围是不同的。
以机器字长16位为例⼦,⽆符号数的范围为0~(216-1=65535),⽽有符号数的表⽰范围为(-32768=215)~(+32767=215-1)(此数值对应原码表⽰)。
机器中的有符号数是⽤补码表⽰的。
2.有符号数对于有符号数⽽⾔,符号的正负机器是⽆法识别的,⽽在机器中是⽤0,1分别表⽰正,负的,并规定将它放在有效数字的前⾯,这样就组成了有符号数。
把符号“数字化”的数叫做机器数,⽽把带“+”或“-”符号的数叫做真值。
⼀旦符号数字化后,符号和真值就形成了⼀种新的编码。
有符号数有原码、补码、反码和移码等四种表⽰形式。
2.1 有符号数的编码⽅法-原码表⽰法原码是机器数中最简单的⼀种表⽰形式,其符号位为0表⽰正数,为1表⽰负数,数值位即真值的绝对值,故原码⼜称作带符号位的绝对值表⽰。
整数原码的定义为式中x为真值,n为整数的位数。
例如,当x=-1110时,[x]原=24-(-1110)=11110⼩数的原码定义为例如,当x=-0.1101时,[x]原=1-(-0.1101)=1.1101当x=0时[+0.0000]原=0.0000[-0.0000]原=1-(0.0000)=1.0000可见[+0]原不等于[-0]原,即原码中的零有两种表⽰形式。
原码编码的优缺点其表⽰简单明了,易于和真值转换,但⽤原码进⾏加减运算时,确带来了许多⿇烦。
2.2 有符号数的编码⽅法-补码表⽰法补码利⽤了⽣活中的“补数”的概念,即以某个数为基准,称为模数,该数对模数的取模运算的结果就是补数。
例如,-3=+9(mod12),4=4(mod12)=16(mod12)。
计算机原码、反码、补码、机器数、真值、有符号数、无符号数等的区分与运算

在计算机的存储器中统一采用二进制数的方式进行数据存储。
而编程中则综合使用二进制、八进制、十进制与十六进制的数据表示方法,程序编译后一般生成十六进制的可烧写文件,而烧写到存储器后最终在存储单元中存放的还是二进制形式。
而二进制又有真值,原码,反码,补码,机器数,有符号数,无符号数,等诸多概念之分。
故下面主要就二进制数(以整数为例,后面提到的数据皆指整数)的存储与运算过程中涉及到的一些概念与规则进行梳理。
讲的主要是在计算机中的,以8位单片机为例,后面以32位ARM单片机指令举例。
1有符号数和无符号数。
数据首先分为有符号数和无符号数。
对于无符号数来说,肯定指的0与正数,无负数之说,自然也无原码、反码、补码之说,一般也不针对于无符号数讨论机器数、真值等概念。
其存储方式与有符号数存储也无特别之处,具体的将在“存储单元中的数据”一节讲述。
有符号数,有正负与0三种,由于在计算机中无法表示负号,或者说用专门的符号表示负号很不方便,于是就采用对正负号进行数值编码的方式,用“0”代表非负数,“1”代表负数。
根据不同的编码方式,对有符号数一般可以有原码、反码、补码三种最常见的编码形式。
2 真值真值就是所表示的数的大小,一般用10进制表征。
3 原码、反码、补码具体概念我就不重复了,只重申下相关结论:a.正数的原码、反码、补码都相同。
b.负数的反码为原码的按位取反(保持符号位不变),补码为反码加1.4 机器数原码、反码、补码都是机器数的一种表示形式,或说都属于机器数。
5 存储单元中的数据(存储单元包括存储器中的存储单元和寄存器)在计算机的存储器的存储单元中的数据均以补码形式存放的,于是在计算机中的数据表示有下面结论:a不使用原码与反码。
但原码与反码可以作为计算真值的中间媒介。
b存储单元中的数据以补码形式存在。
c 数据的存取与运算都以补码形式进行。
d补码就是机器数,机器数就是补码。
解释:掌握一个基本原则——简单,存储单元是个很有原则的家伙,他只管存01序列,才不管该序列是表示指令编码还是数据呢,更不会管是有符号数还是无符号数,也不管是数据的原码、反码还是补码。
c语言 有符号和无符号数混合运算

在深入探讨C语言中有符号和无符号数混合运算之前,我们先来了解一下C语言中有符号和无符号数的基本概念。
在C语言中,有符号数和无符号数都是整数类型。
有符号数可以表示正数、负数和0,而无符号数只能表示非负数和0。
在C语言中,分别用int、long、short等关键字来声明有符号数变量,而用unsigned关键字声明无符号数变量。
接下来,我们将深入探讨C语言中有符号和无符号数混合运算的问题。
在C语言中,当有符号数和无符号数进行混合运算时,会发生隐式类型转换。
具体来说,当有符号数和无符号数进行运算时,无符号数会自动转换为有符号数,然后进行运算。
这种隐式类型转换可能导致一些意想不到的问题,特别是在涉及位运算时。
在进行有符号和无符号数混合运算时,我们需要特别注意以下几个方面:1. 数据类型的转换有符号数和无符号数进行混合运算时,需要注意数据类型的转换。
由于无符号数会自动转换为有符号数,可能导致数据溢出的问题,从而影响计算结果的准确性。
2. 位运算的问题在进行位运算时,由于有符号数和无符号数的不同表示方式,可能会导致结果不如预期。
在对有符号数进行右移操作时,如果该数为负数,则在高位补1;而对无符号数进行右移操作时,在高位补0。
3. 结果的理解在进行有符号和无符号数混合运算时,需要理解运算结果的真实含义。
尤其是在涉及到负数和溢出的情况下,对结果的理解更加重要。
在实际编程中,为了避免有符号和无符号数混合运算带来的问题,我们可以采取以下几点建议:1. 明确运算类型在进行有符号和无符号数混合运算时,可以显式地将无符号数转换为有符号数,以避免隐式类型转换可能带来的问题。
2. 谨慎使用位运算在进行位运算时,需要特别小心处理有符号和无符号数的混合运算,尤其是对负数的处理方式。
3. 结果的验证在进行有符号和无符号数混合运算后,需要对结果进行验证,确保结果的准确性和正确性。
总结回顾:在C语言中,有符号和无符号数混合运算可能会带来意想不到的问题。
有符号数的加减法和无符号数的加减法,和,系统是如何识别有符号数和无符号数的

有符号数的加减法和⽆符号数的加减法,和,系统是如何识别有符号数和⽆符号数的⼀.有符号数的加减法1、符号数与⽆符号数的⼈为规定性:⼀个数,是有符号数还是⽆符号数都是⼈为规定的。
真值:机器数是将符号"数字化"的数,是数字在计算机中的⼆进制表⽰形式。
只有符号数时才有。
机器数对应的数值称为机器数的真值。
这个机器数可能是原码,反码或补码。
也就是说不同含义的机器数 对应不同的真值。
原码与真值对应,但不能参加运算,只能由真值的补码形式参加运算。
(1)真值=>原码 (简单)去掉+ - 号前⾯加0 1。
原码=>真值 去掉0 1 前⾯加+ - 号。
eg: 真值 + 1001 1100 - 1010 0010原码 0 1001 1100 1 1010 0010(2)真值=>补码正真数的补码:去掉+号前⾯加0。
负真数的补码:去掉 - 号前⾯加1,从右到左找到第⼀个1,左边全部取反。
补码=>真值符号位0的补码的真值:去掉0前⾯加+号。
符号位1的补码的真值:去掉1前⾯加-号,从右到左找到第⼀个1,左边全部取反。
eg:真值 + 1001 1100 - 1010 0010补码 0 1001 1100 1 0101 1110例如求 1000 0100+0000 1110解答:默认数据从存储器中读取参与运算器运算。
问运算的结果是什么,没有说求什么码的事,那就是问结果的真值。
分符号数和⽆符号数两种情况。
若规定为⽆符号数,则(132)10+(14)10=(146)10。
//或写法(146)D // D (decimal)表⽰这个数是⼗进制若规定为符号数:默认存储的数都是补码。
[x]补 =b n ... b1b0。
(x是原码)1000 0100和0000 1110都是补码。
(补码加法运算 = 补码的对应真值的加法运算)补码1000 0010的真值为 - 111 1110 = -124 // 1000 0100是真值 -124的补码。
c语言有符号数和无符号数运算

c语言有符号数和无符号数运算ห้องสมุดไป่ตู้
3. 运算规则: - 加法和减法:有符号数和无符号数之间可以进行加法和减法运算。在这种情况下,C
语言会将有符号数视为无符号数进行运算,结果也是无符号数。如果结果超出了无符号数的 表示范围,则会发生溢出。
- 乘法和除法:有符号数和无符号数之间可以进行乘法和除法运算。在这种情况下,C 语言会将有符号数视为无符号数进行运算,结果也是无符号数。
- 比较运算:有符号数和无符号数之间可以进行比较运算。在这种情况下,C语言会将 有符号数视为无符号数进行比较。
c语言有符号数和无符号数运算
4. 注意事项: - 混合运算:在有符号数和无符号数之间进行混合运算时,C语言会将有符号数转换为
无符号数进行运算。这可能导致一些意外的结果,特别是当有符号数为负数时。 - 无符号数的溢出:无符号数在发生溢出时会进行模运算,即超出表示范围的值会被截
断为非负数。
总之,有符号数和无符号数之间的运算在C语言中有一些差异。在进行混合运算时,需要 注意数据类型的转换和溢出的处理,以避免产生意外的结果。
c语言有符号数和无符号数运算
在C语言中,有符号数和无符号数之间的运算有一些区别。以下是关于有符号数和无符号 数运算的一些要点:
1. 数据类型:有符号数使用带符号的数据类型,如int、short、long等;无符号数使用无 符号的数据类型,如unsigned int、unsigned short、unsigned long等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、你自已决定是否需要有正负。
就像我们必须决定某个量使用整数还是实数,使用多大的范围数一样,我们必须自已决定某个量是否需要正负。
如果这个量不会有负值,那么我们可以定它为带正负的类型。
在计算机中,可以区分正负的类型,称为有符类型,无正负的类型(只有正值),称为无符类型。
数值类型分为整型或实型,其中整型又分为无符类型或有符类型,而实型则只有符类型。
字符类型也分为有符和无符类型。
比如有两个量,年龄和库存,我们可以定前者为无符的字符类型,后者定为有符的整数类型。
2、使用二制数中的最高位表示正负。
首先得知道最高位是哪一位?1个字节的类型,如字符类型,最高位是第7位,2个字节的数,最高位是第15位,4个字节的数,最高位是第31位。
不同长度的数值类型,其最高位也就不同,但总是最左边的那位(如下示意)。
字符类型固定是1个字节,所以最高位总是第7位。
(红色为最高位)单字节数:1111 1111双字节数:1111 1111 1111 1111四字节数:1111 1111 1111 1111 1111 1111 1111 1111当我们指定一个数量是无符号类型时,那么其最高位的1或0,和其它位一样,用来表示该数的大小。
当我们指定一个数量是无符号类型时,此时,最高数称为“符号位”。
为1时,表示该数为负值,为0时表示为正值。
3、无符号数和有符号数的范围区别。
无符号数中,所有的位都用于直接表示该值的大小。
有符号数中最高位用于表示正负,所以,当为正值时,该数的最大值就会变小。
我们举一个字节的数值对比:无符号数: 1111 1111 值:255 1* 27 + 1* 26 + 1* 25 + 1* 24 + 1* 23 + 1* 22 + 1* 21 + 1* 20有符号数: 0111 1111 值:127 1* 26 + 1* 25 + 1* 24 + 1* 23 + 1* 22 + 1* 21 + 1* 20同样是一个字节,无符号数的最大值是255,而有符号数的最大值是127。
原因是有符号数中的最高位被挪去表示符号了。
并且,我们知道,最高位的权值也是最高的(对于1字节数来说是2的7次方=128),所以仅仅少于一位,最大值一下子减半。
不过,有符号数的长处是它可以表示负数。
因此,虽然它的在最大值缩水了,却在负值的方向出现了伸展。
我们仍一个字节的数值对比:无符号数: 0 ----------------- 255有符号数: -128 --------- 0 ---------- 127同样是一个字节,无符号的最小值是 0 ,而有符号数的最小值是-128。
所以二者能表达的不同的数值的个数都一样是256个。
只不过前者表达的是0到255这256个数,后者表达的是-128到+127这256个数。
一个有符号的数据类型的最小值是如何计算出来的呢?有符号的数据类型的最大值的计算方法完全和无符号一样,只不过它少了一个最高位(见第3点)。
但在负值范围内,数值的计算方法不能直接使用1* 26+ 1* 25的公式进行转换。
在计算机中,负数除为最高位为1以外,还采用补码形式进行表达。
所以在计算其值前,需要对补码进行还原。
这些内容我们将在第六章中的二进制知识中统一学习。
这里,先直观地看一眼补码的形式:以我们原有的数学经验,在10进制中:1 表示正1,而加上负号:-1 表示和1相对的负值。
那么,我们会很容易认为在2进制中(1个字节): 0000 0001 表示正1,则高位为1后:1000 0001应该表示-1。
然而,事实上计算机中的规定有些相反,请看下表:首先我们看到,从-1到-128,其二进制的最高位都是1(表中标为红色),正如我们前面的学。
然后我们有些奇怪地发现,1000 0000 并没有拿来表示 -0;而1000 0001也不是拿来直观地表示-1。
事实上,-1 用1111 1111来表示。
怎么理解这个问题呢?先得问一句是-1大还是-128大?当然是 -1 大。
-1是最大的负整数。
以此对应,计算机中无论是字符类型,或者是整数类型,也无论这个整数是几个字节。
它都用全1来表示 -1。
比如一个字节的数值中:1111 1111表示-1,那么,1111 1111 - 1 是什么呢?和现实中的计算结果完全一致。
1111 1111 - 1 = 1111 1110,而1111 1110就是-2。
这样一直减下去,当减到只剩最高位用于表示符号的1以外,其它低位全为0时,就是最小的负值了,在一字节中,最小的负值是1000 0000,也就是-128。
我们以-1为例,来看看不同字节数的整数中,如何表达-1这个数:可能有同学这时会混了:为什么 1111 1111 有时表示255,有时又表示-1?所以我再强调一下本节前面所说的第2点:你自已决定一个数是有符号还是无符号的。
写程序时,指定一个量是有符号的,那么当这个量的二进制各位上都是1时,它表示的数就是-1;相反,如果事选声明这个量是无符号的,此时它表示的就是该量允许的最大值,对于一个字节的数来说,最大值就是255。
原码、反码、补码我们已经知道计算机中,所有数据最终都是使用二进制数表达。
我们也已经学会如何将一个10进制数如何转换为二进制数。
不过,我们仍然没有学习一个负数如何用二进制表达。
比如,假设有一 int 类型的数,值为5,那么,我们知道它在计算机中表示为:00000000 00000000 00000000 000001015转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。
现在想知道,-5在计算机中如何表示?在计算机中,负数以其正值的补码形式表达。
什么叫补码呢?这得从原码,反码说起。
原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。
比如 00000000 00000000 00000000 00000101 是 5的原码。
反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。
取反操作指:原为1,得0;原为0,得1。
(1变0; 0变1)比如:将00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。
称:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。
反码是相互的,所以也可称:11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互为反码。
补码:反码加1称为补码。
也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。
比如:00000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010。
那么,补码为:11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011所以,-5 在计算机中表达为:11111111 11111111 11111111 11111011。
转换为十六进制:0xFFFFFFFB。
再举一例,我们来看整数-1在计算机中如何表示。
假设这也是一个int类型,那么:1、先取1的原码:00000000 00000000 00000000 000000012、得反码: 11111111 11111111 11111111 111111103、得补码: 11111111 11111111 11111111 11111111可见,-1在计算机里用二进制表达就是全1。
16进制为:0xFFFFFF。
码、反码、补码计算机原理-原码、反码、补码更多内容:/jsjyuanli/200701/7687.html首先要说的是:计算机中的带符号数一般用补码表示1、负数的补码与对应正数的补码之间的转换可以用同一种方法——求补运算完2、可将减法变为加法,省去减法器;3、无符号数及带符号数的加法运算可以用同一电路完成。
带符号数的表示先引进两个名词:机器数和真值。
将一个数在机器中的表示形式,即编码称为机器数,数的本身称为真值。
平常我们经常用的带符号的数就是真数,如:+50,-10.5等等。
常用的机器数有三种:原码、补码和反码。
1.原码通俗定义将数的符号数码化,即用一个二进制位表示符号:对正数,该位取0,对负数,该位取1。
而数值部分保持数的原有形式(有时需要在高位部分添几个0)。
这样所得结果为该数的原码表示。
例,x=+1001010,y= -1001010,z= 一1110(= 一0001110)。
当原码为8位时,x、y和z的原码分别是:[x]原=01001010;[y]原=11001010;[Z]原=10001110.其中最高位为符号位。
2)正规定义2.反码反码:正数的反码为原码,负数的反码是原码符号位外按位取反。
例如:X1=+67=+100 0011B ,[X1]反=0100 0011BX2=-67=-100 0011B ,[X2]反=1011 1100B对正数,其反码与原码相同,也与补码相同。
对负数,其反码等于原码除符号位外,按位求反(末位不加1)。
利用反码也可使带符号数的加、减法转化为单纯的加法,但麻烦一些。
一般把求反码作为求补的中间过程,即 [x]补=[x]反+1。
3.补码1)补码的引进和定义据统计,在所有的运算中,加、减运算要占到80%以上,因此,能否方便地进行正、负数加、减运算,直接关系到计算机的运行效率。
把一个负数加模的结果称为该负数的补码(结果是一个正数,它和该负数是等价的,确切地说,是一对一的,因而可看作是该负数的编码),定义正数的补码就是它本身,符号位取0,即和原码相同。
这就是补码的通俗定义。
将这个定义用数学形式表示出来,就可得到补码的正规定义:其中n为补码的位数。
这个定义实际也将真值的范围给出来了,当n=8时,一127≤x<127。
和原码相比,补码表示可多表示一个数。
当n=8时,多表示的数是一128。
2)补码的求法对正数,补码同原码。
例如,x=+0101001,[x]补=[x]原=00101001。
对负数,由定义求补码,需做减法,不方便。
经推导可知,负数的补码等于其原码除符号位外按位“求反”(1变0,0变1),末位再加1。
例如,y=一0001100,[y]原=10001100,[Y]补=11110011+1=11110100。
•算法:1.正数的补码与原码相同;2.负数的补码由原码除符号位保持不变外,其余各位按位取反,再在末位加1。