精华内容
下载资源
问答
  • 有符号数和无符号数详解

    千次阅读 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. ...


    有符号数和无符号数详解(2)补码详解
    https://blog.csdn.net/lqy971966/article/details/106130830

    1. 通过例子看问题

    unsigned int uint;
    int i = -1;
    uint = i;
    printf("%x %u %d\n", uint, uint, uint);
    printf("%x %u %d\n", i, i, i);
    //输出
    	ffffffff 4294967295 -1
    	ffffffff 4294967295 -1
    /*
    	因为 根据打印格式打印的
    	%d 有符号32位整数
    	%u 无符号32位整数
    	%lld 有符号64位整数
    */
    uint = 0xffffffff;
    i = uint;
    printf("%x %d\n", uint, i);
    //输出ffffffff -1
    
    int j = -1;
    printf("%x\n", (~j));
    //输出0
    
    int k = 1;
    printf("%x\n", (~k);
    //输出0xfffffffe
    
    char c = 1;
    printf("%d\n", (~c));
    //输出-2
    
    因为: 
     char c = 1;
    printf("%x\n", c); //1
    printf("%x\n", (~c)); //fffffffe
    printf("%d\n", (~c));//-2
    

    如果以上例子看的没问题,那你就不用往下看了!哈哈~~

    2. 有符号数和无符号数

    2.1 什么是无符号数 ?

    无符号数(unsigned number) 是相对于有符号数而言的,
    指的是整个机器字长的全部二进制位均表示数值位,相当于数的绝对值。
    如: 32位操作系统中
    (普及概念:

    1. 8位的CPU,一次只能处理一个8位的“数据”或者一个8位的"指令"。比如’00001101’。

    2. 32位CPU一次能处理32位的数据或者一个32位的指令。
      如 00000001 00000011 00000111 00001111)

      unsigned int iMinNum = 0;
      unsigned int iMaxNum = 0xffffffff;
      printf(“iMinNum = %u, iMaxNum = %u\n”, iMinNum, iMaxNum);
      结果:
      –》iMinNum = 0, iMaxNum = 4294967295

    其中,无符号数32位的取值范围是: 0~4294967295
    注意:%u 无符号32位整数

    2.2 什么是有符号数 ?

    有符号数(signed number) 和无符号数基本相同,不同的是:一般用最高有效位(MSB)来表示数的符号,正数用0表示,负数用1表示。
    如: 32位操作系统中

    int iMinNum = 0x80000000; //1000 0000 0000 0000 0000 0000 0000 0000 
    int iMaxNum = 0x7fffffff; //0111 1111 1111 1111 1111 1111 1111 1111
    printf("iMinNum = %d, iMaxNum = %d\n", iMinNum, iMaxNum);
    结果:
    iMinNum = -2147483648, iMaxNum = 2147483647
    

    其中,有符号数32位的取值范围是: -2147483648~2147483647
    二进制表示:
    最小值: 1000 0000 0000 0000 0000 0000 0000 0000
    最大值: 0111 1111 1111 1111 1111 1111 1111 1111
    因为: 在有符号数中,最高位所代表的值是- 2^ 31 ,而不是-1
    注意:%d 有符号32位整数

    2.3 有符号数和无符号数的区别

    1. 有符号数和无符号数的区别:
      在32位编译器中,有符号数的二进制位最高位表示-2^ 31,而无符号数的二进制位最高位表示的是2^31
    2. 无论它是有符号数还是无符号数,它的二进制表示肯定都是唯一的
      (不可能在有符号形式下有一种表示,在无符号形式下也有一种表示)

    3. 原码、反码、补码

    3.1 背景

    1. 负数表示问题
      在数学中,任意基数的负数都在最前面加上“−”符号来表示。
      在计算机硬件中,数字都以无符号的二进制形式表示。
      但是负数如何用二进制表示呢?
    2. 解决:
      当前通过:原码、反码、补码,用于扩展二进制数字系统,来表示有符号数。

    3.2 原码、反码、补码

    3.2.1 什么是机器数?

    机器数就是 数在计算机中的二进制表示形式。
    机器数是带符号的,在计算机中用二进制数的最高位存放符号, 正数为0, 负数为1。
    例如:

    1. 计算机字长为8位,则:
      十进制数+3 ,转换成二进制00000011,
      十进制数-3 ,转换成二进制10000011。
      那么,这里的00000011和10000011就是机器数。

    3.2.2 什么是真值?

    真值就是真正的值。
    因为二进制数的最高位是符号位,所以机器数的形式值就不等于真正的数值。
    为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。
    即第一位用±表示数字的正负,其余为二进制数。
    例如:
    0000 0001的真值= +000 0001,1000 0001的真值= –000 0001。

    3.2.3 原码、反码、补码

    1. 原码:
      就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。

       例如:
       1 的源码 0000...0001
       -1的原码:1,000...0001
      
    2. 反码:
      正数的反码是其本身
      负数的反码是在其原码的基础上, 符号位不变,其余各个位取反

       例如:
       1的反码还是1
       如-1的补码为1,111...1110
      
    3. 补码:
      正数的补码就是其本身
      负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1

       例如:
       1的补码还是1
       -1的补码为1,111...111
       (这就解释了无符号-1 = 1111…1111 = 4294967295)
      

    因为: 在有符号数中,最高位所代表的值是- 2^ 31 ,而不是-1

    4. -1 和 0xFFFFFFFF问题

    上面的补码就解释了 -1 和 0xFFFFFFFF的问题
    有符号 -1 的二进制表示就是以补码形式表示,即: 0xffffffff ( =2 ^ 31 +2 ^ 30+…+2 ^ 1+2 ^ 0=- 2 ^ 31+2 ^ 31-1=-1)

    unsigned (-1)表示无符号整数的最大值 即: 4294967295(二进制全1)
    因此,unsigned(-1)=1,111…111(共32个1)。表示unsigned的最大值。
    也就是0xFFFFFFFF

    5. 计算机为什么采用补码来进行运算

    https://blog.csdn.net/m0_37955444/article/details/79848485

    有符号数和无符号数详解(2)补码详解
    https://blog.csdn.net/lqy971966/article/details/106130830

    参考

    https://blog.csdn.net/qq_28114615/article/details/85884280
    https://blog.csdn.net/weixin_38825407/article/details/86297969
    https://blog.csdn.net/weixin_40825228/article/details/81136554
    https://blog.csdn.net/baidu_33725271/article/details/69801949
    https://www.cnblogs.com/Wubg/p/5813595.html

    展开全文
  • 符号数有符号数的溢出判断

    万次阅读 多人点赞 2018-05-25 21:09:35
    符号数溢出判断:其实很简单,就一句话: 当最高为向更高位进位(或借位)时产生溢出。就像这样: 有符号数溢出判断: 高潮来了: 最高位进位状态⊕次高位进位状态=1,则溢出怎么理解呢?首先要知道异或是...

         因为学了微机原理的课程,发现好多人对无符和有符的判断很迷(meng)茫(bi),所以决定总结一下。


    无符号数溢出判断:其实很简单,就一句话:

               当最高为向更高位有进位(或借位)时产生溢出。

    就像这样:

     

    有符号数溢出判断:

           高潮来了:

                   最高位进位状态⊕次高位进位状态=1,则溢出

    怎么理解呢?

    首先要知道(异或)是什么:相同为0,相异为1

    然后是“状态”一词,状态指的是有没有进位

    那这句话的意思就是:最高位和次高位,一个有进位一个没有进位,则他们的状态异或得1,则结果就有溢出。

    直接上例子:

    反正只要记住最高位和次高位进位状态不同,他们溢出就行了。



    然后我们来看一下微机原理里面判断of位的经典例题:

       将1001 1100和1110 0101相加后,标志寄存器中OF为何值?

            首先,我们都知道OF为溢出标志位(有溢出为1,无溢出为0),然后,他的定义就是判断补码运算时的溢出情况,既然是补码,那就一定是有符号   数。

    那就用判断有符号数溢出的方法判断,先进行运算:

    由此看出(大家自己看吧),最高位有进位,次高位也有进位,则没有溢出,则OF=0


     














    展开全文
  • Verilog中的有符号数和无符号数

    千次阅读 2019-10-03 19:41:44
    普通十进制数一律被认为是有符号数,如 32 //有符号数 -15 //有符号数 1 2 2、基数格式的表示法 基数格式表示情况下,数的符号要明确声明,如 8'sh51 //8位有符号数01010001 6'so72 //6位有符号数111010,即十进制...

    verilog符号数问题主要涉及【常数】、【变量】、【运算符】。

    一、整型数
    1、十进制数
    普通十进制数一律被认为是有符号数,如

    32 //有符号数
    -15 //有符号数
    1
    2
    2、基数格式的表示法
    基数格式表示情况下,数的符号要明确声明,如

    8'sh51 //8位有符号数01010001
    6'so72 //6位有符号数111010,即十进制数下的-6 
    1
    2
    对于未声明符号位的,按无符号数处理

    4'd2 //4位无符号数
    'hAF //32位16进制数,无符号。注意未声明长度的,统一按32位长度处理
    1
    2
    二、变量
    当将一个常数赋值给某个变量时,仿真器如何解释这个常数的值,最终取决于这个变量的符号形式,此时常数的符号仅仅决定常数的各位取1还是0而已。
    将一个有符号常量赋值给一个无符号变量可能会出现意想不到的结果。

    reg [5 : 0] burst_data;
    burst_data = -4'd12;//-4'd12转换成二进制数为110100,而burst_data为无符号reg型变量,
                        //所以最终将储存在其中的二进制数翻译成52
    1
    2
    3
    作为对比有:

    integer burst_data;
    burst_data = -4'd12;//-4'd12转换成二进制数为110100,integer为有符号型整形变量,
                        //所以最终将储存在其中的二进制数翻译成有符号数-12
    1
    2
    3
    下面对常用变量类型的符号情况做一下总结。

    1、wire
    wire型变量要明确声明其符号。

    wire [signed] [[msb:lsb]] net1;
    1
    2、reg
    reg型变量要明确声明其符号。

    reg [signed] [[msb:lsb]] reg1;
    1
    3、integer
    integer型变量不必也不允许声明符号,其中存储的二进制数本身就代表有符号数。

    integer interger1;
    1
    三、算数操作符
    在一个表达式中混合使用有符号操作数和无符号操作数时,必须非常小心。
    只要有一个操作数时有符号的,在运算开始前,所有其他的操作数都被转换成了无符号数。

    'd2+4'sb1001//第一个操作数为无符号数,第二个操作数为有符号数,故第二个数被认为是无符号数9,结果为9+2=11
    1
    为了完成有符号数的运算,可以使用 $signed 和 ¥unsigned系统函数控制操作数的符号行为。

    $signed('d2)+4'sb1001 //-5
    --------------------- 
    版权声明:本文为CSDN博主「PPOP95」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/a453697601/article/details/85056699

    展开全文
  • 有符号数 原码,反码,补码等,他的范围是随意的 计算机通常用补码来表示有符号数 计算机的一个数据可以看作是有符号数,也可以看作无符号数的 也就是说计算机并不知道你存的是有符号数还是无符号数,而且所做...

    计算机不能区分两者

    无符号数 没有原码,反码,补码等,他的范围是 ≥0 的
    有符号数 有原码,反码,补码等,他的范围是随意的

    计算机通常用补码来表示有符号数
    计算机的一个数据可以看作是有符号数,也可以看作无符号数的
    也就是说计算机并不知道你存的是有符号数还是无符号数,而且所做的运算并不需要管你存的是什么数


    王爽《汇编》是这样写的,下面是负数的时候为反码

    			00000001B,可以看作无符号数为1,有符号数为+1
    			10000001B,可以看作无符号数129,有符号数-127
    

    这两个数进行Add的时候

    			看作无符号数  1+129=130 (10000010B)
    			看作有符号数 +1-127=-126(10000010B)
    

    结果一致,不管我们如何看待,都已经包含两种含义


    展开全文
  • 有符号数、无符号数理解

    万次阅读 多人点赞 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,无符号数的...
  • java中有符号数与无符号数互相转换

    千次阅读 2018-10-10 11:57:37
    java中有符号数与无符号数互相转换 文章目录java中long类型转换成无符号数java中无符号数转换成有符号数 java中long类型转换成无符号数 由于JAVA中基本数据类型均为有符号数,而且最大数据类型long为8字节 当long为...
  • 符号数有符号数比较大小

    千次阅读 2017-04-16 18:54:07
    申明: ...在此感谢博主!先出几个题目,再解释一下为什么答案是那样的。题目一:int a = -1; unsigned int b = 1;...结果输出: 1因为无符号数有符号数比较时,要将有符号数转化为无符号数,再来比较。a 转化为
  • 有符号数和无符号数

    千次阅读 2018-10-01 22:31:55
    专题:汇编语言中有符号数还是无符号数? 一、汇编语言在存储方面讲,有符号数和无符号数存储形式是一致的。 l 数据在内存或CPU的寄存器中都是按照有符号数的二进制补码方式存储的。  例如(在debug中测试): ...
  • 有符号数和无符号数之间的转换

    千次阅读 2019-07-16 16:34:43
    有符号数和无符号数之间的转换 C语言运行各种不同的数据类型之间做强制类型转换,假设x为一个符号整型变量,通过(unsigned)x可以将一个符号整数转换为无符号整数。 对于16位,在一台采用补码机器上,强制...
  • 有符号数与无符号数的加减法

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

    千次阅读 2016-01-12 17:42:20
    1,C语音中负数怎么转换为补码形式 2,有符号数怎么转换为无符号数 3,无符号数怎么转换为有符号数
  • 符号数 有符号数 与 补码

    千次阅读 2018-10-16 22:43:34
    符号数 有符号数 与 补码 本文是深入理解计算机系统这本书里面关于补码有符号数符号数章节的一个摘要和读书报告,我个人认为这本书关于这一段的表述,要比绝大多数网上的博客甚至是国内教材要深入浅出的多.同时...
  •  看无符号数的最高位是否为1,如果不为1(为0),则有符号数就直接等于无符号数;如果无符号数的最高位为1,则将无符号数取补码,得到的数就是有符号数。 以unsigned char和char为例子: 1.1将无符号数2转
  • 有符号数和无符号数在一起进行运算时,要首先将有符号数转换为无符号数,再进行运算。 整型常量。 [cpp] view plain copy unsigned int n = 1024;  unsigned int m = 0XFF;  其中1024和oxff这...
  • 有符号数和无符号数的转换及思考

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

    万次阅读 多人点赞 2017-03-13 17:18:07
    verilog数值计算-有符号数和无符号数 位宽截断 算术运算 有符号数赋值 位宽截断 位宽大的数赋值给位宽小的数,数据就会被截断,截断的规则就是从低位开始取,被截断的是高位 codewire [5:0] a; wire [4:0] f; ...
  • 有符号数和无符号数的区别

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

    万次阅读 2018-08-02 14:24:21
    最近写的一个工程里面要用到有符号数符号数的比较大小,贴出代码供大家取用。 如果1<2,比较结果compare_flag输出为1,否则输出为零 _signed_flag为1代表作为有符号数比较,0代表作为无符号数比较 ...
  • 确如题主所说,计算机中存储的任何数据都是二进制形式,单看数据是无法认定其格式和内容的。 计算机要用二进制编码来表达...先看8位二进制与无符号数有符号数的对应二进制 无符号 符号 00000000 0 000000001 1 1
  • 有符号数和无符号数的范围

    千次阅读 2017-10-28 15:26:20
    对于有符号数表示的范围我们要着重谈一下,4位有符号数,负数最小值很多人认为是1111(即-6),然而并不是, 我们先把4位有符号数大概全部都写出来是这样的1111-1000-0000-0111,即从负数到0再到正数, 然而有木有...
  • C语言中的自动类型转换: 在C语言中,进行混合运算时,编译系统遵循一定规则,完成数据类型的自动转换...所以,无符号数有符号数进行运算时,先需要将有符号数转化为无符号数进行操作。以下代码所展示出的结果,...
  • C++中无符号数有符号数的转换

    千次阅读 2019-05-14 19:55:08
    C++中的无符号数有符号数的转换 1.无符号数转为有符号数 unsigned short int a = 50000; signed short int b = 0; b = a; cout << "无符号数转为有符号数: " << b << endl; 解释:因为...
  • 感谢博主的分享,转自:C++ 有符号数与无符号数混合运算 当算术表达式中既符号数符号数时,那么在进行运算之前,这个带符号数值会先被转换成无符号数!然后再进行运算。如, unsigned i = 10; int j = -...
  • # 有符号数转换为无符号数 def i2ui(data, length=1): max_num = 256 ** length return max_num + data + 1 if data < 0 else data # 无符号数转换为有符号数 def ui2i(data, length=1): max_num = 256 ** ...
  • title: C语言有符号数和无符号数的判断方法 date: 2019-2-12 15:39:26 tags: C 学完CSAPP有符号数和无符号数的部分后冒出了这个问题,在网上查找资料后总结下。应用场景:在一个新系统中,不知道该系统是否支持无...
  • FPGA中的有符号数和无符号数的运算

    千次阅读 2019-09-30 07:26:05
    对于乘法操作,无符号数直接采用“*”运算符,有符号数运算可通过定义输出为 signed 来处理。  需要注意的是,尽量不要使有符号数与无符号数进行混合计算。因为只要一个无符号数的运算单元,整个算式将被将成无...
  • 计算机中分有符号数和无符号数

    千次阅读 2017-05-25 09:58:30
    计算机中分有符号数和无符号数符号数: 所谓无符号数,通常表示一个数的绝对值,即数的各位都用来表示数值的大小。一个字节(8位)二进制数只能表示0~255范围内的数。因此,要表示大于255的数,必须采用多个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,108,487
精华内容 443,394
关键字:

有符号数