精华内容
下载资源
问答
  • 计算机中带符号数表示

    万次阅读 2009-04-27 20:43:00
    来自:http://icebloods.blog.sohu.com/64118412.html为叙述方便,先...原码1)通俗定义将符号数码化,即用一个二进制位表示符号:对正数,该位取0,对负数,该位取1。而数值部分保持的原有形式(有时需要在高位部

    来自:http://icebloods.blog.sohu.com/64118412.html

    为叙述方便,先引进两个名词:机器数和真值。将一个数在机器中的表示形式,即编码称为机器数,将数本身称为真值。常用的机器数有三种:原码、补码和反码。

    1.原码

    1)通俗定义

    将数的符号数码化,即用一个二进制位表示符号:对正数,该位取0,对负数,该位取1。而数值部分保持数的原有形式(有时需要在高位部分添几个0)。这样所得结果为该数的原码表示。

        例,x=+1001010,y= -1001010,z= -1110(= -0001110)。当原码为8位时,x、y和z的原码分别是:

        [x]原=01001010;

        [y]原=11001010;

        [Z]原=10001110.

    其中最高位为符号位。

    2)正规定义

    其中,x为真值,n为原码的位数。这个定义实际是将真值的范围给出来了,当n=8时,-127<x<127,因而,其数值部分写成二进制形式,最多为7位。从该定义可看出,x为正数时,其原码还是数本身,第8位(符号位)补0;x为负数时,-x等于去掉负号,但要加上127,即第8位为1(127=10000000(2))。因此,这个定义和上面的通俗定义是一致的。 

    3)原码表示的特点

    原码表示有三个主要特点:一是直观,与真值转换很方便;二是进行乘、除运算方便;三是加、减运算比较麻烦。第一点是显然的。说原码表示进行乘、除运算方便是因为其数值部分保持了数据的原有形式,对数值部分进行乘或除就可得到积或商的数值部分,而积或商的符号位可由两个数原码的符号位进行逻辑运算而得到。说原码表示进行加、减运算比较麻烦,以加法为例,两个数相加需先判别符号位,若其不同,实际要做减法,这时需再判断绝对值的大小,用绝对值大的数减绝对值小的数,最后还要决定结果的符号位。

    2.补码

    1)补码的引进和定义

    据统计,在所有的运算中,加、减运算要占到80%以上,因此,能否方便地进行正、负数加、减运算,直接关系到计算机的运行效率。

    如日常生活中的一个例子——指针式钟表。现在时针指向11点钟,要使其指向6点钟,有两种方法,一是正拨7个格,二是反拨5个格。如果把钟表看成一个计算器,正拨看成加运算,反拨看成减运算,那么,在钟表上有:11-5=11+7,即11+(-5)=11+7。之所以这样,是因为11+7=12+6,而在钟表上,12相当于0,超过12时,12就丢失了。这种运算称为按模运算。钟表的模为12。所谓“模”,是指一个系统的量程,或者说一个系统所能表示的最大的数(确切地说,为最大数时加1)。按模运算是指运算结果超过模时,模丢失。当模为整数时,按模运算也可理解成除以模求余数的过程。常用符号“mod”表示按模运算。   

    在计算机中,一个具体数据类型的位数是确定的。例如,字节型数据为8位,当每一位都为1时,再加1,最高位将产生进位。如果不采取措施,这个进位将被丢失,丢失的量为2^8=256,这就是8位数据的模。从上面的例子已看到,按模运算,可以使正数加负数转化成正数加正数(11-5=11+7),一个负数可以等价于一个正数(-5等价于+7)。看一下计算机中情况。例如,要将+0001111(15)和-0001100(-12)相加,实际是要做减法,但不这样做,而是先将-0001100与模10000000(256)相加,得11110100(-12+256=244),再拿原被加数0001111和它(11110100)相加,得00000011(15+244=256+3=3),最高位的进位,即模丢失。

    这样,同样得到了正确结果。由此可见,在计算机中,只要将负数加模就可以转化成正数,使正数加负数转化成正数加正数。

    把一个负数加模的结果称为该负数的补码(结果是一个正数,它和该负数是等价的,确切地说,是一对一的,因而可看作是该负数的编码),定义正数的补码就是它本身,符号位取0,即和原码相同。这就是补码的通俗定义。将这个定义用数学形式表示出来,就可得到补码的正规定义:

    其中n为补码的位数。这个定义实际也将真值的范围给出来了,当n=8时,-127≤x<127。和原码相比,补码表示可多表示一个数。当n=8时,多表示的数是-127=-128。

    2)补码的求法

    对正数,补码同原码。例如,x=+0101001,[x]补=[x]原=00101001。对负数,由定义求补码,需做减法,不方便。经推导可知,负数的补码等于其原码除符号位外按位“求反”(1变0,0变1),末位再加1。例如,y=-0001100,[y]原=10001100,[Y]补=11110011+1=11110100。   

    多做几例,可得出一种心算求补的方法——从最低位开始至找到的第一个1均不变,符号位不变,这之间的各位“求反”(该方法仅用于做题)。   

    由求补的方法可以看出,对于补码,其符号位和原码的符号匣相同,也表示了真值的符号。   

    3)补码的性质

    ①[x+y]补=[x]补+[y]补,即两数之和的补码等于各自补码的和。   

    ②[x-y]补=[x]补+[-y]补,即两数之差的补码等于被减数的补码与减数相反数的补码之和。   

    ③[[x]补]补=[x]原,即按求补的方法,对[x]补再求补一次,结果等于[x]原。   

    4)利用补码进行加、减运算   

    引进补码的目的是方便带符号数的加、减运算,这里仅看一下加法,举几个例子。请注意:符号位也参与运算,符号位出现的进位为模,应丢弃。下面是三个利用补码求和的例子。这里假定机器数为8位。

    符号位为0,真值为正,所以,x+Y,=+0001011(2)(+11)。

    符号位有进位,自动丢失。符号位为1,真值为负,对[x+y]补求补得[x+Y]原=10001011,由此,x+Y= -0001011(-11)。

    符号位有进位,自动丢失。符号位为O,真值为正,所以,x+Y=+0000111(+7)。   

    上面是三种类型的数的补码运算:正数+正数、负数+负数、正数+负数。负数+正数和正数+负数是一样的。由此可见,采用补码表示,进行数的加法运算可统一成进行数的补码加法运算。   

    上面的例子只是用来说明引进补码的好处,其运算过程不是计算机的实际过程。在计算机中不必每次都进行原码与补码之间的转换,可以将运算结果以补码形式存储起来,以便直接参与后面的运算。   

    3.反码简介   

    对正数,其反码与原码相同,也与补码相同。对负数,其反码等于原码除符号位外,按位求反(末位不加1)。利用反码也可使带符号数的加、减法转化为单纯的加法,但麻烦一些。一般把求反码作为求补的中间过程,即[x]补=[x]反+1。   

    上面所介绍的机器数编码主要用于汇编语言编程。在高级语言中,数可带有符号,但编译程序最终还是将其表示成机器数。

     

    slowgrace注:在VB中,负数也是补码表示的。比如在立即窗口做如下测试:

    ?hex(clng(-1))

    FFFFFFFF

    展开全文
  • 理解为机器中使用的数, 即二进制表示的数, 两种, 无符号数和有符号数 3. 原码 原码是与真值形式最接近的机器数, 最高位为符号位(0 表示正数, 1表示负数), 符号位后面是数值部分, 用绝对值表示, 举例来说,...

    1. 真值
    真值即用十进制, 或二进制等进制表示的一个数

    2. 机器数
    理解为机器中使用的数, 即二进制表示的数, 两种, 无符号数和有符号数

    3. 原码
    原码是与真值形式最接近的机器数, 最高位为符号位(0 表示正数, 1表示负数), 符号位后面是数值部分, 用绝对值表示, 举例来说, -0为1000,-7为1111,5为0101, 另从50年代开始,浮点数的小数用原码定点小数表示。

    4. 反码
    反码是一种特殊补码形式的机器数, (用原码表示的数)正数的反码是它本身, 负数的反码是符号位保持不变, 其余各位取反。

    5. 补码
    正数的补码是它本身, 负数的补码是符号位不变, 其余各位取反后加1

    6. 移码
    移码适合比较大小, 真值大时, 对应的移码也大, 真值小时, 对应的移码也小。
    移码:将每一个数值加上一个偏置常数bias。

    通常:当编码位数为n时
    1. bias取2^n-1
    2, bias取2^(n-1)-1
    当bias为 2^(n-1)-1 时,移码和补码仅第一位不同, 此时补码和移码之间的关系为, 补码的数值部分不变,符号取反,即得移码。由移码也可得补码。

    举例:E(biased) = E + 2^3(bias = 2^3 = 1000B)可以得到:-8(+8) ~ 0000B,0(+8) ~ 1000B

    用途:移码用来表示浮点数的阶(便于浮点数加减运算时的对阶操作,比较大小)。

    举例:1.01 * 2^(-1) + 1.11 * 2^3 中,运用移码可以简化比较:

    将原式变为 1.01 * 2^(-1+4) + 1.11 * 2^(3+4) 就可以得到011(3)<111(7)

    展开全文
  • c++中带符号二进制表示

    千次阅读 2019-05-21 09:42:27
    一、二进制表示带符号数方法: (1)最高位为1表示负数,最高位为0表示正数; (2)哪一位是最高位取决于变量类型的字节数; eg:在win32控制台应用程序中,int是32位,即是4字节的类型,当我们定义int i;那么这个i...

    c++中带符号二进制数的表示

    一、二进制表示带符号数方法:

    (1)最高位为1表示负数,最高位为0表示正数;

    (2)哪一位是最高位取决于变量类型的字节数;

    eg:在win32控制台应用程序中,int是32位,即是4字节的类型,当我们定义int i;那么这个i的最高位在从左数第三十一位(默认左一为第0位)。

    二、原码补码反码:

    (1)正数:原码补码反码是一样的;

    (2)负数:负数的原码除了最高位为1,其余和正数一致,其反码除了最高位不变其余位为按位取反,补码为反码加1;

    eg:对于win32平台:

    22的原码为0000 0000 0000 0000 0000 0000 0001 0110

    22的反码为0000 0000 0000 0000 0000 0000 0001 0110

    22的补码为0000 0000 0000 0000 0000 0000 0001 0110

    -22的原码为1000 0000 0000 0000 0000 0000 0001 0110

    -22的反码为1111 1111 1111 1111 1111 1111 1110 1001

    -22的补码为1111 1111 1111 1111 1111 1111 1110 1010

    三、编程中所有数都用数的补码来表示为机器字:

    (1)即22在机器中表示为0000 0000 0000 0000 0000 0000 0001 0110

    (2) -22在机器中表示为1111 1111 1111 1111 1111 1111 1110 1010

    四、实例:加减法带来的数据溢出问题

    在这里插入图片描述
    int 型数据最大值是2147483647

    2147483646的二进制表示为  01111111 11111111 11111111 11111110
    +6					    00000000 00000000 00000000 00000110
    结果                    10000000 00000000 00000000 00000100
    最高位除外,取反          11111111 11111111 11111111 11111011      (-2147483643)
    补码(+1)               11111111 11111111 11111111 11111100	   (-2147483644)
    
    得出-1073741822
    
    展开全文
  • 符号数的2进制表示方法是:最高位表示符号位,‘1’表示负数,‘0’表示正数。 通常负数以补码的形式出现。例如一个4bit数,首先它能够表示的有符号数的范围从-8~7。-8的二进制补码值为4'b1000,-7的二进制补码...

           有符号数的2进制表示方法是:最高位表示符号位,‘1’表示负数,‘0’表示正数。

           通常负数以补码的形式出现。例如一个4bit数,首先它能够表示的有符号数的范围从-8~7。-8的二进制补码值为4'b1000,-7的二进制补码值为4'b1001...,正数的二进制补码等于它本身,即2的二进制补码值为4'b0010。

           关于有符号数的Verilog写法如下:

           reg signed [3:0] rega;

           reg signed [3:0] regb;

           rega = -4'd6;//写法1

           regb = 4'shA;//写法2,A即1010,1010为-6的补码值。

           上面的代码,定义了一个4bit位宽的reg变量。仿真一下就可以看到,两种写法用有符号10进制表示,都是-6。

     

     

     



     

     

    展开全文
  • 写在前面:计算机中数据存储与运算的专业名词听起来晦涩,实际上我们在九年义务教育阶段就已经掌握了,如:整型(integer)——整数,浮点数(float)——小数,无符号数(unsigned)——正数,有符号数(signed)...
  • 为什么要引入带符号数? 编码规则是什么? 原码、反码、补码是什么? 如何计算带符号数
  • Verilog 带符号数操作

    千次阅读 2017-12-12 15:44:10
    (2)那么Verilog中编程的时候对编程人员来说,其实想不到现在的编译器(Quartus II 9.1和ISE10.1没有问题,更高的版本应该更加可以了)都支持verilog有符号运算的综合了。在定义时直接加上signed即可,如下:  ...
  • verilog中有符号数表示方法

    千次阅读 2018-04-12 18:17:55
    符号数表示方法有两种:在变量定义时,用signed定义,例如reg signed [7:0] a.使用$signed()作强制类型转换,例如$signed(a).Verilog会自动进行符号的扩展。有号数与无号数的混合计算:不要在同一个verilog叙述中...
  • 带符号数的编码

    千次阅读 2017-05-22 22:17:10
    但由于原码,反码用两种数来表示’0’,而补码,移码只用一个数表示,所以范围就多了一个…… 明确点说,-10000,原码反码没办法表示(n=5)。 但是补码可表示成10000,移码可表示成00000。 推导:-15=11111,-...
  • 符号数表示方法:原码反码补码

    千次阅读 2019-10-27 12:33:40
    符号数表示方法3种:原码、反码、补码 构成:符号位+数值部分组成 1 负 0 正 1.原码 正数原码 = 反码 = 补码 2.反码 负数:符号位不变,数值位取反 3.补码 负数:反码加1得到补码 例题:有符号数在内存中为1001 ...
  • 符号数的二进制表示方式

    千次阅读 2019-04-21 14:51:36
    32位数一共可以表示个数,对于有符号数来说,表示,其中第一位是符号位。符号为1表示负数;0表示正数。 源码表示: 十进制 二进制源码 二进制反码 二进制补码 65535 01111111 11111111 11111111 ...
  • 符号数表示—原码 反码 补码

    千次阅读 2015-07-24 17:03:16
    计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。 在计算机系统中,数值一律用补码来...
  • 符号数表示负数

    千次阅读 2013-05-10 15:54:00
    一样,所以在使用 2的补码 表示符号数的机器上,结果就是 -1 另外,需要注意的是当 表达式同时存在有符号类型和无符号类型时操作数都自动转换为无符号类型 unsigned int a=20; signed int b=-...
  • n位的无符号数表示范围为:000 ~ 2n−12^n-12n−1 二、有符号数 有符号数用“0”表示“正”号,用“1”表示“负”号。有符号数的机器表示有原码、补码、反码和移码。 三、定点小数和定点整数 定点表示即约定机器...
  • (实验二)带符号数移位操作运算

    千次阅读 2018-10-29 07:44:41
    文章目录1. 实验要求2. 相关知识点0. 移位运算1. 原码移位2....​ 用C/C++编程实现输入一个带符号十进制,显示其原、反、补三种机器左、右移2位的结果 2. 相关知识点 机器字长全部假设为 8 位,...
  • 最近在看哈工大刘宏伟老师的《计算机组成原理》,总结其中关于有符号数的几种表示法,顺便感谢老师这么好的公开课。 首先先明确两个概念: 真值:带符号的数,如+101,-101 机器数:符号数字化的数,如0101,...
  • 符号数表示相对简单,直接转换为二进制即可;有符号数则是将最高位作为符号位。所以对于单字节无符号数表示范围为:0~255;有符号数表示范围为:-128~127。 无符号数表示如下,对于a=3: 1字节表示为:0000 0011 ...
  • 带符号(补码)

    千次阅读 2019-05-28 14:36:12
    表示5和-5: 原码:正数的符号位是0,负数的符号位是1 符号位 数值位 5 0 0000101 -5 1 0000101 ...
  • 符号数的第一位用来标识符号位,而无符号数只能表示正数。   区别:(以4位数表示)   有符号数0000 到0111(0到7) + 1000到1111(-8到-1) 在计算机中数是用补码来存储的,正数的补码和原码一样,负数的补码...
  • 符号数: 即没有符号的数。 在c语言中就是 unsigned 类型的。 无符号数在计算机中的存储较为简单, 因为没有符号位, 直接将数字化成二进制然后存储在对应的存储器或者寄存器中。 这时寄存器或者存储器的位数就...
  • 在C++中字符型被分为了三种:char、signed char和unsigned char。需要的注意:字符的表现形式只有两...关于带符号类型:带符号类型在表示范围内正值和负值的量应该平衡,例如,8比特理论上应该可以表示-127至127,大...
  • 符号数的三种表示方式

    千次阅读 2019-05-27 19:50:49
    符号数主要有原码、补码和反码三种表示方式。 原码 二进制定点表示法; 最高位为符号位,计算机数值以补码的方式存储。 2.补码 正数的补码与原码相同; 负数的补码是绝对值的二进制表示按位取反再加一; 最...
  • 计算机中的有符号数表示

    千次阅读 2019-02-26 22:30:33
    数值部分用其绝对值,正数的符号位用“0”表示,负数的符号位用“1”表示 反码 正数的反码与原码相同;负数的反码为:符号位不变,数值部分按位取反。 补码 正数的补码与原码相同;负数的补码为其反码加1. 除了...
  • 为什么计算机中数字符号位0表示正数,1表示负数

    万次阅读 多人点赞 2019-03-09 21:09:50
    只知道书本上说是有一个符号位,当该符号位为0时,表示的是正数,为1时表示负数。我那时没搞懂为什么这样规定,我觉得1么,代表正数挺合理的,那么0就自然表示负数咯,所以不解,只能死记硬背:0正1负。   我个人...
  • 8位有符号数的补码表示范围

    万次阅读 多人点赞 2017-07-15 22:48:07
    将每个二进制位(包括符号位)取反加1,得到一个二进制数,将该数看成无符号数,其值就是上述负数的绝对值。 例如,二进制的 10000000 的最高位为1, 所以它表示的是负数。是负的多少呢?我们将其八
  • 计算机通常用补码来表示符号数 计算机的一个数据可以看作是有符号数,也可以看作无符号数的 也就是说计算机并不知道你存的是有符号数还是无符号数,而且所做的运算并不需要管你存的是什么数 王爽《汇编》是...
  • 符号数:不存在正负之分,所有位都用来表示数的本身。 有符号数:最高位用来表示数的正负,最高位为1则表示负数,最高位为0则表示正数。   1.无符号数--->有符号数  看无符号数的最高位是否为1,如果不为1...
  • 符号数在计算机中的表示方法

    千次阅读 2021-01-04 15:20:18
    最近因为要将一个16bit的音频混音算法改成24bit的,复习了有符号数的计算机内的表示方法. 对负数的二进制表示有些遗忘,在网上找了一下资料,贴出来已备再次遗忘: 假设有一个 int 类型的数,值为5,那么,我们...
  • 符号数和无符号数的转换及思考

    万次阅读 多人点赞 2016-09-16 21:00:51
    1 有符号数和无符号数表示三者的最高位均为符号位.我以前一直没弄明白的是为何8位补码的表示范围是-128~127, 今天查阅了相关资料,于此记下。仍然以8位为例:原码原码的表示范围-127~-0, +0~+127, 共256个数字。正...
  • 符号数和无符号数详解

    千次阅读 2020-05-10 13:47:41
    符号数和无符号数2.1 什么是无符号数 ?2.2 什么是有符号数 ?3. 原码、反码、补码3.1 背景3.2 原码、反码、补码3.2.1 什么是机器数?3.2.2 什么是真值?3.2.3 原码、反码、补码4. -1 和 0xFFFFFFFF问题参考 1. ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 289,467
精华内容 115,786
关键字:

带符号数表示