精华内容
下载资源
问答
  • 有符号数和无符号数在计算机中怎么区分?计算机里面有符号数和无符号数字表示都是一样的,并且对于加法或者减法这些通用的操作都于两类数字都是一样的,并且intel32的处理器里面还有一个EFLAGS标志寄存器里面有两个...

    有符号数和无符号数在计算机中怎么区分?

    计算机里面有符号数和无符号数字表示都是一样的,并且对于加法或者减法这些通用的操作都于两类数字都是一样的,并且intel32的处理器里面还有一个EFLAGS标志寄存器里面有两个标志符CF用来表示无符号计算的溢出,OF用来表示有符号数的溢出。那么到底通过什么来表示一个操作是有符号的还是无符号的?

    作者:匿名用户

    链接:https://www.zhihu.com/question/22132187/answer/20401461

    来源:知乎

    著作权归作者所有,转载请联系作者获得授权。

    确如题主所说,计算机中存储的任何数据都是二进制形式,单看数据是无法认定其格式和内容的。

    计算机要用二进制编码来表达数值的符号,最直观的方法就是符号位。但为了保证基本算术运算在正负数上的一致性,x86计算机对负数采用了特殊的编码方式,即补码。

    为什么补码这么巧妙实现了正负数的加减运算?参见维基百科:

    http://zh.wikipedia.org/wiki/%E4%BA%8C%E8%A3%9C%E6%95%B8#.E4.BA.8C.E8.A1.A5.E6.95.B0.E7.9A.84.E5.B7.A5.E4.BD.9C.E5.8E.9F.E7.90.86

    下面结合题主提到的寄存器状态举个例子。为简化起见,我们8位二进制数来讲。

    先看8位二进制与无符号数和有符号数的对应

    二进制 无符号 有符号

    00000000 0 0

    00000001 1 1

    ...

    01111110 126 126

    01111111 127 127

    10000000 128 -128

    10000001 129 -127

    ...

    11111110 254 -2

    11111111 255 -1

    按照上述对应关系,我们可以把二进制运算解释为有符号或无符号的十进制运算。

    只有算术运算才会有正负号问题,而算术运算中最主要的就是加法系列指令和减法系列指令。范围内的运算咱们不关心,主要看看超出范围的运算如何处理。

    当运算超出范围后,CPU会改变标志寄存器中的值(置1),来表示当前的运算结果。算术运算主要用到的标志位如下。

    OV(溢出):运算结果超过数值表达范围(比如8位数运算超过256);

    ZR(零):运算结果为0时;

    PL(符号):运算结果的最高位为1。

    AC(辅助进位):低4位是否向高4位进/借位;

    CY(进位):高位进/借位;

    1. 当加法系指令的二进制结果大于11111111时会产生溢出,结果保留超过11111111的部分,并置溢出位为1。

    例如加法add指令:

    11111110+00000011=100000001=>00000001

    标志位:

    由于低4位和高4位都进位了,所以AC和CY置1

    对应的无符号运算:

    254+3=1

    对应的有符号运算:

    -2+3=1

    2. 减法系的指令会产生“减不过”的情况。减不过时cpu会给左数的最高位添加一个1,使得比右数大,再做减法并置溢出。

    例如减法sub指令:

    00000010-00000011=>100000010-00000011=11111111

    标志位:

    由于低4位和高4位都借位了,所以AC和CY置1,由于运算结果高位为1,PL置1

    对应的无符号运算:

    2-3=255

    对应的有符号运算:

    2-3=-1

    其他的算术运算较复杂,但都可以用类似的方法分析。因超出问题范围,此处不再赘述。

    展开全文
  • 我们都知道在编程中数据类型是分为无符号与有符号,也就是所谓的正数与负数,现在以8位的unsigned char与char来说明有符号数与无符号数在计算机中的存储。 unsigned char表示的数据的范围为[0-255] == [0-28-1] char...

    我们都知道在编程中数据类型是分为无符号与有符号,也就是所谓的正数与负数,现在以8位的unsigned char与char来说明有符号数与无符号数在计算机中的存储。
    unsigned char表示的数据的范围为[0-255] == [0-28-1]
    char表示的数据的范围为[-128,+127] == [-27-1,+27]
    unsigned char与char 都是8bit位的数字,在计算机中的存储单元是由0x00-0xFF来表示,其中这256个数字相同的部分为[0,+127] 存储单元为0x00-0x7F
    0x80-0xFF分情况,当数据类型为unsigned char时表示[128,255],当数据类型为char时表示[-128,-1],其他数据类型同理。

    展开全文
  • 确如题主所说,计算机中存储的任何数据都是二进制形式,单看数据是无法认定其格式和内容的。 计算机要用二进制编码来表达...先看8位二进制与无符号数和有符号数的对应二进制 无符号 有符号 00000000 0 000000001 1 1

    确如题主所说,计算机中存储的任何数据都是二进制形式,单看数据是无法认定其格式和内容的。

    计算机要用二进制编码来表达数值的符号,最直观的方法就是符号位。但为了保证基本算术运算在正负数上的一致性,x86计算机对负数采用了特殊的编码方式,即补码。

    为什么补码这么巧妙实现了正负数的加减运算?参见维基百科:
    补码
    -1的二进制表示

    下面结合题主提到的寄存器状态举个例子。
    为简化起见,我们8位二进制数来讲。
    先看8位二进制与无符号数和有符号数的对应二进制
    无符号 有符号
    00000000 0 000000001 1 1

    01111110 126 126
    01111111 127 127
    10000000 128 -128
    10000001 129 -127

    11111110 254 -2
    11111111 255 -1

    按照上述对应关系,我们可以把二进制运算解释为有符号或无符号的十进制运算。
    只有算术运算才会有正负号问题,而算术运算中最主要的就是加法系列指令和减法系列指令。

    范围内的运算咱们不关心,主要看看超出范围的运算如何处理。
    当运算超出范围后,CPU会改变标志寄存器中的值(置1),来表示当前的运算结果。

    算术运算主要用到的标志位如下。
    OV(溢出):运算结果超过数值表达范围(比如8位数运算超过256);
    ZR(零):运算结果为0时;
    PL(符号):运算结果的最高位为1。
    AC(辅助进位):低4位是否向高4位进/借位;
    CY(进位):高位进/借位;

    1. 当加法系指令的二进制结果大于11111111时会产生溢出,结果保留超过11111111的部分,并置溢出位为1。例如加法add指令:11111110+00000011=100000001=>00000001
      标志位:
      由于低4位和高4位都进位了,所以AC和CY置1
      对应的无符号运算:
      254+3=1
      对应的有符号运算:
      -2+3=1

    2. 减法系的指令会产生“减不过”的情况。
      减不过时cpu会给左数的最高位添加一个1,使得比右数大,再做减法并置溢出。
      例如减法sub指令:
      00000010-00000011=>100000010-00000011=11111111
      标志位:
      由于低4位和高4位都借位了,所以AC和CY置1,由于运算结果高位为1,PL置1
      对应的无符号运算:
      2-3=255
      对应的有符号运算:
      2-3=-1

    其他的算术运算较复杂,但都可以用类似的方法分析。因超出问题范围,此处不再赘述。

    展开全文
  • 有符号数的第一位用来标识符号位,而无符号数只能表示正数。   区别:(以4位数表示)   有符号数0000 到0111(0到7) + 1000到1111(-8到-1) 在计算机中数是用补码来存储的,正数的补码和原码一样,负数的补码...

    有符号数的第一位用来标识符号位,而无符号数只能表示正数。

     

    区别:(以4位数表示)

     

    有符号数0000 到0111(0到7)   +    1000到1111(-8到-1)

    在计算机中数是用补码来存储的,正数的补码和原码一样,负数的补码等于符号位不变其他位取反再加1。当达到最大正数0111(7的补码),再加1时为1000(补码)。

    负数补码的绝对值是连符号位取反加1,然后看成无符号数,所以1000表示-8,1001表示-7。


    无符号数:0000到1111(0到15)


    展开全文
  • #0.计算机组底层的电路只认识0和1,并没有...这里主要讨论无符号数和有符号数在计算机中是如何存储以及在VerilogHDL语言中如何使用。#2.VerilogHDL语言中除了integer类型之外的所有数据类型默认都是无符号类型; ...
  • 因为我们不能确定它是有符号数还是无符号数。这一步是编译器中确定的。 eg:给定1111 1111 1111 1111 ; 如果它是以unsigned int 存放进来的。那么它的值为65535; 如果它是以int存放进来的,那么它的值为-1; ...
  • 无符号数和有符号数 文章目录无符号数和有符号数1.无符号数2.有符号数1.机器数与真值2.原码表示法整数小数3.补码表示法1.补的概念2.一个小例子3.补码的定义1.整数2.小数4.求补码的快捷方式4.举例4.反码表示法1.整数...
  • 1.数在计算机中的存放形式 上过数电的都知道,计算机存放数据分两种情况,即有符号存储和无符号存储。无符号存储是直接存储其二进制值,而有符号存储则是存储其补码。以8位为例,如存储无符号数12,则在计算机中...
  • 无符号数

    2019-08-04 23:50:03
    无符号数在计算机内部以原码存放 无符号数没有符号位 无符号数只用于表示正数 unsigned只能用来修饰整数类型的变量,不能修饰浮点类型的变量 unsigned int i = -10; 无符号数只能用来表示正数,但是在上面这个C...
  • 计算机中分有符号数和无符号数

    千次阅读 2017-05-25 09:58:30
    计算机中分有符号数和无符号数 无符号数: 所谓无符号数,通常表示一个数的绝对值,即数的各位都用来表示数值的大小。一个字节(8位)二进制数只能表示0~255范围内的数。因此,要表示大于255的数,必须采用多个...
  • 这个问题我学习汇编语言的过程中一直很苦恼,网上看了很多帖子,基本上都是说是人自己设定是有符号数还是无符号数的。这样的回答是很扯淡的,TM计算机和人脑又不是一个东西,看来很多人学东西基本上都是一知半解...
  • 这个问题我学习汇编语言的过程中一直很苦恼,网上看了很多帖子,基本上都是说是人自己设定是有符号数还是无符号数的。这样的回答是很扯淡的,TM计算机和人脑又不是一个东西,看来很多人学东西基本上都是一知半解...
  • 计算机中的有符号数和无符号数

    千次阅读 2015-09-05 11:46:36
    无正负类型的数(只有整数类型),成为“无符号数”(unsigned)。简明的说,无符号说就是其所有的位数都用来表示数值的大小,有符号数除最高位来表示数值的正负外(0表示正数;1表示负数),其余各位用来表示数值的大小...
  • 关于有符号数和无符号数最近,在讨论有符号数和无符号数在计算机中的表示的问题,结果越讨论越乱。而且使用C语言胡乱验证了一番,最后发现使用了C语言的工具,竟然使得数据真正存储的事实更加令人迷惑。从一个侧面也...
  • 在计算机中,可以区分正负的类型,称为有符类型,正负的类型(只有正值),称为符类型。 数值类型分为整型或实型,其中整型又分为符类型或有符类型,而实型则只有符类型。 字符类型也分为有符和符类型
  • 经常遇到补码、原码、反码、无符号数、有符号数等概念。但是在理解上总出现概念混淆,分不清楚之间的界线与联系。 先看下面整数赋值的例子 short sx = -12345; 像上面的赋值语句,整数-12345是如何存储...
  • 有符号数与无符号数

    2019-12-02 10:14:59
    文章目录1 有符号数1.1 有符号数的表示1.2 计算负数的补码的两种方法2 无符号...有符号数在计算机内部用补码表示: 正数的补码为正数本身。 负数的补码为负数的绝对值各位取反后加1。 比如: 8位整数5的补码为:...
  • 本人是今天在做关于汇编程序的时候用到了一个IMUL命令时感到对有符号数以及无符号数在计算机中的表示方法感到十分困惑的情况下,在网上搜到的这篇文章,在这里要感谢这篇文章的原作者。 1、你自已决定是否需要有...
  • 无符号数在计算机中的存储较为简单, 因为没有符号位, 直接将数字化成二进制然后存储在对应的存储器或者寄存器中。 这时寄存器或者存储器的位数就可以表示数值的范围, 比如:如果是 8 位的, 表示的范围为 0 ~ ...
  • 有符号数和无符号数

    2019-07-26 15:18:46
    数学中的数据分为正数和负数,在计算机中我们分为无符号数和有符号数,无符号数表示全是正数,有符号数表示有正数和负数。这里好比将容器贴个标签,将它贴上“无符号数”的标签,那么它里面都是正数。如果它的标签是...
  • 无符号数(默认为整数) 无符号数顾名思义也就是不带符号的数 若机器字长为8位,无符号数的表示范围 0~2^8-1 , 即0~255 ✪ 有符号数(0表示正号,1表示负号) ① 小数表示:如(符号位与数字位用.(点)表示) +0....
  • 无符号数和有符号数

    2019-10-30 21:04:37
    无符号数 计算机的数都存档寄存器中,寄存器位数也成为机器字长。 无符号数也就是没有符号的数,寄存器中每一位都用来存放数值。 有符号数 有符号的数,寄存器中要分出一位来表示数值的正负。 机器数和真值 正数...
  • 计算机中的符号位 1.数据类型的最高位用于标识数据的符号 ...3.在计算机内部用原码表示无符号数 无符号数默认为正数 无符号数没有符号位 4.对于固定长度的无符号数 MAX_VALUE + 1 -> MIN_VA...
  • 符号数在计算机中的表示

    千次阅读 2012-03-06 16:13:27
    8位有符号数补码表示范围:-128至127. ...将每个二进制位(包括符号位)取反加1,得到一个二进制数,将该数看成无符号数,其值就是上述负数的绝对值。 例如,二进制的 10000000 的最高位为1, 所以它表示
  • 我们知道,在C语言中存在无符号数和有符号数(一些高级语言如Java里面是没有无符号数的),但是对于计算机而言,其本身并不区别有符号数和无符号数,因为在计算机...1:有符号数和无符号数在数值上的区别。 有符号...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,407
精华内容 562
关键字:

无符号数在计算机