精华内容
下载资源
问答
  • 确如题主所说,计算机中存储的任何数据都是二进制形式,单看数据是无法认定其格式和内容的。 计算机要用二进制编码来表达...先看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

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

    展开全文
  • 我们都知道编程中数据类型是分为符号与有符号,也就是所谓的正数与负数,现在以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],其他数据类型同理。

    展开全文
  • 符号数的第一位用来标识符号位,而无符号数只能表示正数。   区别:(以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)


    展开全文
  • 经常遇到补码、原码、反码、...2、该字面常量为非负整数时,可以理解为:该字面常量以无符号数进行编码并存储字节单元中; 若该字面常量为负数,可以理解为:该字面常量以补码的编码形式存储字节单元中。 ...
    unsigned short sx = -1;

    -1是有符号数,unsigned short声明的变量是无符号的,怎么理解?

    字面常量-1有符号,这里的数是指十进制数,以补码的编码形式存储在字节单元中,-1的补码为0xffff。在执行阶段,从常量区拷贝到栈的对应变量单元中,因此栈中变量sx的所在字节单元的内容为0xffff。

    unsigned short 指明变量 sx 为无符号,这里的数是指二进制数。它的作用是表明计算机在面对二进制串的时候,认为是一串二进制原码。

    所以,计算机理解“0xffff”为原码,转换为十进制为2^{^{16}}-1=65535. 

    printf("%d",sx);

    打印出来的值即为65535.

     

    无符号数与有符号数

    人为指定地某个二进制串有无符号。若该二进制串是有符号的,在计算机中它是补码;若该二进制串是无符号的,在计算机中它是原码。

    对于同一串二进制“1101”

    若人为指定“1101”为无符号数:在计算机中“1101”转化为十进制数为13.

    若人为指定“1101”为有符号数:在计算机中“1101”转化为十进制数为-3.

     

    由于补码的可表示范围有正负数,而原码只能表示非负数,所以,站在人的角度(十进制),可以这样理解无符号数与有符号数:

    负整数是有符号的,因为通过补码表示;非负整数可认为是有或无符号,因为非负整数原码与补码相同。

    展开全文
  • 也就是说计算机并不知道你存的是有符号数还是无符号数,而且所做的运算并不需要管你存的是什么数 王爽《汇编》是这样写的 00000001B,可以看作无符号数为1,有符号数为+1 1000000...
  • 计算机中的有符号数无符号数

    千次阅读 2015-09-05 11:46:36
     在计算机中,可以区分正负类型的数,成为“有符号数”(signed);正负类型的数(只有整数类型),成为“无符号数”(unsigned)。简明的说,符号说就是其所有的位数都用来表示数值的大小,有符号数除最高位来...
  • 计算机组成原理实验 Quartus 四位无符号数乘法器
  • 计算机组成-无符号数乘法

    万次阅读 2018-08-17 10:02:08
    下面是C语言编写的一个乘法子程序,实现两个16位无符号数相乘,结果为32位无符号数。 unsigned int mul16(unsigned int x, unsigned int y){ unsigned int a,b,c; unsigned int i; a=x; b=y; c=0; f...
  • 这个问题我学习汇编语言的过程中一直很苦恼,网上看了很多帖子,基本上都是说是人自己设定是有符号数还是无符号数的。这样的回答是很扯淡的,TM计算机和人脑又不是一个东西,看来很多人学东西基本上都是一知半解...
  • 符号数在计算机中的表示方法

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

    千次阅读 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. ...
  • 符号数无符号数的加减法

    万次阅读 多人点赞 2017-04-24 14:41:58
    1、符号数无符号数的人为规定性:一个数是有符号还是无符号数都是人为规定的。进行二进制运算时用无符号数或是补码运算时,结果都是正确的。10000100+00001110 若规定为无符号数,即 132+146=146D 。若规定为有...
  • 计算机中分有符号数无符号数

    千次阅读 2017-05-25 09:58:30
    计算机中分有符号数无符号数 无符号数: 所谓无符号数,通常表示一个数的绝对值,即数的各位都用来表示数值的大小。一个字节(8位)二进制数只能表示0~255范围内的数。因此,要表示大于255的数,必须采用多个...
  • 符号数无符号数详解(2)补码详解1. 为什么需要补码1.1 背景2 补码的思想2.1 我们希望只设计加法运算器,不用减法运算器。2.2 现在问题是:怎么表示-1呢?3. 补码3.1 补码的优点3.2 例子:4. 补码的本质:参考 1...
  • 首先,明确一个概念,什么是有符号数,什么是无符号数。以整型为例,int 类型的既可以表示正整数,又...在计算机表示中,无符号数的所有位数都表示该数的大小。有符号数的最高位表示正负,0表示正1表示负。例如,  
  • 前面:计算机中数据存储与运算的专业名词听起来晦涩,实际上我们九年义务教育阶段就已经掌握了,如:整型(integer)——整数,浮点数(float)——小数,无符号数(unsigned)——正数,有符号数(signed)...
  • 计算机中有无符号数的表示方法

    千次阅读 2013-12-16 17:07:37
    在计算机中用补码表示数据的原因:如果二进制第一位是0的话, 代表正数, 1的话代表负数. 比如 -1的表示方法是(以8位数字为例.) 10000001 这就是-1的表示方法, 第一个1就是符号位. 这种表示方法有一个致命的缺点, 有...
  • 符号数无符号数的转换及思考

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

    千次阅读 2020-04-15 15:12:58
    C语言允许我们定义有符号数无符号数,例如一个字节的存储空间,我们可以定义成unsigned char,也可以定义成signedchar,但是你知道它们的区别吗?你知道它们是怎样被存储,又怎样被区分处理吗? 1.有符号数...
  • 符号数无符号数理解

    万次阅读 多人点赞 2019-01-05 23:16:12
    大家都知道,C/C++中,对于w位编译器,其有符号数表示的数值范围为-2 ^ (w-1)~2 ^(w-1)-1,无符号数表示的数值范围为0 ~ 2 ^ w-1,举个例子,16位编译器中,有符号数的数值范围为-2 ^ 31 ~ 2 ^ 31-1,无符号数的...
  • 无符号数符号数 与 补码

    千次阅读 2018-10-16 22:43:34
    本文是深入理解计算机系统这本书里面关于补码有符号数无符号数章节的一个摘要和读书报告,我个人认为这本书关于这一段的表述,要比绝大多数网上的博客甚至是国内教材要深入浅出的多.同时由于markdown的文档表示公式很...
  • 无符号数的减法

    千次阅读 2020-04-17 15:59:49
    存储在计算机中的数据是一定的,所谓的无符号数,只是对于数据的解读方式不一样,并不影响数据之间的计算。而无符号数之间进行的加减法运算,是通过补码来进行的。比如a - b,实质上是a补 + (-b补)。 for example: ...
  • 无符号数和有符号数的范围区别:  同样是一个字节,无符号数的最大值是255,而有符号数的最大值是127。原因是有符号数中的最高位被挪去表示符号了。并且,我们知道,最高位的权值也是最高的(对于1字节数来说是2的...
  • 关于无符号数之间的减法

    千次阅读 热门讨论 2020-03-20 20:29:42
    学习计算机组成原理汇总遇到了一个关于无符号数减法的问题 首先条件是8位字长的计算机中运行: unsigned int x = 134; unsigned int y = 246; unsigned int z1 = x - y; 很明显 x的机器数是 1000 0110B y的机器...
  • 补码和无符号数

    千次阅读 2020-03-28 15:15:24
    无符号数和有符号数之间的转换 不同字长间的转换 整数运算 乘以常数
  • 符号数无符号数之间的转换

    千次阅读 2018-09-28 14:00:13
    补码与无符号数 补码转换为无符号数原理: 例如: T2Uw(−12345)=−123456+216=53191 T2U_{w}(-12345) = -123456+2^{16}=53191 T2Uw​(−12345)=−123456+216=53191 无符号数转化为补码原理: 截断数字 无符号数...
  • 本文针对二进制数字是如何组成有意义的数字,涉及到的编码形式进行理解,主要集中三个概念:有符号数无符号数、浮点数。虽然这些知识点可能实际工作当中真正派上用场的场合并不多,但是对于计算机是如何联系...
  • 符号数无符号数

    千次阅读 2018-10-01 22:31:55
    一、汇编语言存储方面讲,有符号数无符号数存储形式是一致的。 l 数据内存或CPU的寄存器中都是按照有符号数的二进制补码方式存储的。  例如(debug中测试):  mov ax,-9  怎么理解这个代码...
  • 怎么区分有符号数无符号数

    千次阅读 2016-06-26 13:18:59
    我还是搞不清指令本身是如何区分有符号数无符号数!(问题汇总) 论坛的一个CSDN提问,对各方面的回答进行了汇总,答案还算比较清楚的。   一般好像是有专门的有符号数指令和无符号数指令 比如 符号除...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 258,207
精华内容 103,282
关键字:

无符号数在计算机