首页 > 其他分享 >有符号二进制数--补码

有符号二进制数--补码

时间:2023-01-16 11:36:27浏览次数:52  
标签:0000 -- 补码 二进制 反码 原码 1000




1.计算机内,有符号数的3种表示方法:原码,反码,补码。

 

(1)最高位为符号位,“0”为正,“1”为负,其余位为数值大小。

 

(2)反码:正数    反码  = 原码;

                        负数    反码  = { 符号位不变}且{ 数值位按位取反}

 

下面重点说一下补码!

 

2.整数的补码:

 

(1)正数的补码 = 原码;

 

(2)负数的补码 = { 原码符号位不变} 且 { 数值位按位取反+1}

 

             or = { 原码符号位不变} 且 { 数值位从右边数第一个1及其右边的0保持不变,左边按位取反}

 

(3)举例:以十进制数+99和-99为例:(符号位0为正数,1为负数)

 

           +99 原码 = 0110_0011 b

           +99 补码 = 0110_0011 b

 

            -99 原码 = 1110_0011 b

            -99 补码 = 1001_1101 b

 

注意:(a)0的补码只有一个:

                      

                      +0 原码 = 0000_0000 b,-0 原码 = 1000_0000 b

                      +0 反码 = 0000_0000 b,-0 反码 = 1111_1111 b

                      +0 补码 = 0000_0000 b,-0 补码 = 0000_0000 b  -- 相同,均为0000_0000 b

         

               (b)8位二进制数的表示范围:

                            

                         8位原码:            -127 d -- +127 d

                     1111_1111 b --  0111_1111 b 

  

                         8位反码:            -127 d -- +127 d

                     1000_0000 b --  0111_1111 b

 

                         8位补码:            -128 d -- +127 d

                     1000_0000 b --  0111_1111 b

 

  

 

3.纯小数的原码:小数点前一位为符号位,若为正,则后面数值位不变;

                                                                                  若为负,则后面数值位取反加1。

                                

     例子:0.9239 d 原码 = 0.1110_1100_1000_0100

                                   补码 = 0.1110_1100_1000_0100

 

                 -0.9239 d 原码 = 1.1110_1100_1000_0100

                                   补码 = 1.0001_0011_0111_1100

 

4.一般在硬件语言中使用二进制补码时,是不可能带有小数点的,而且一个数通常有正数和小数两部分,这种情况下最好的方法是先将该数转换为正数,再进行转换会。

 

例子:    -87.36    原码 = 1101_0111 . 0101_1100_0010_1000

 

求其补码,计算过程如下:

 

先用 -87.36 * 2^16 = -5725224 d = 1101_0111_0101_1100_0010_1000 b

此时再取反加1,则补码 =  1010_1000_1010_0011_1101_1000 b,

最后再除2^16,恢复小数点的位置即可。

 

 

 

 



1.计算机内,有符号数的3种表示方法:原码,反码,补码。

 

(1)最高位为符号位,“0”为正,“1”为负,其余位为数值大小。

 

(2)反码:正数    反码  = 原码;

                        负数    反码  = { 符号位不变}且{ 数值位按位取反}

 

下面重点说一下补码!

 

2.整数的补码:

 

(1)正数的补码 = 原码;

 

(2)负数的补码 = { 原码符号位不变} 且 { 数值位按位取反+1}

 

             or = { 原码符号位不变} 且 { 数值位从右边数第一个1及其右边的0保持不变,左边按位取反}

 

(3)举例:以十进制数+99和-99为例:(符号位0为正数,1为负数)

 

           +99 原码 = 0110_0011 b

           +99 补码 = 0110_0011 b

 

            -99 原码 = 1110_0011 b

            -99 补码 = 1001_1101 b

 

注意:(a)0的补码只有一个:

                      

                      +0 原码 = 0000_0000 b,-0 原码 = 1000_0000 b

                      +0 反码 = 0000_0000 b,-0 反码 = 1111_1111 b

                      +0 补码 = 0000_0000 b,-0 补码 = 0000_0000 b  -- 相同,均为0000_0000 b

         

               (b)8位二进制数的表示范围:

                            

                         8位原码:            -127 d -- +127 d

                     1111_1111 b --  0111_1111 b 

  

                         8位反码:            -127 d -- +127 d

                     1000_0000 b --  0111_1111 b

 

                         8位补码:            -128 d -- +127 d

                     1000_0000 b --  0111_1111 b

 

  

 

3.纯小数的原码:小数点前一位为符号位,若为正,则后面数值位不变;

                                                                                  若为负,则后面数值位取反加1。

                                

     例子:0.9239 d 原码 = 0.1110_1100_1000_0100

                                   补码 = 0.1110_1100_1000_0100

 

                 -0.9239 d 原码 = 1.1110_1100_1000_0100

                                   补码 = 1.0001_0011_0111_1100

 

4.一般在硬件语言中使用二进制补码时,是不可能带有小数点的,而且一个数通常有正数和小数两部分,这种情况下最好的方法是先将该数转换为正数,再进行转换会。

 

例子:    -87.36    原码 = 1101_0111 . 0101_1100_0010_1000

 

求其补码,计算过程如下:

 

先用 -87.36 * 2^16 = -5725224 d = 1101_0111_0101_1100_0010_1000 b

此时再取反加1,则补码 =  1010_1000_1010_0011_1101_1000 b,

最后再除2^16,恢复小数点的位置即可。

 

 

 

 


标签:0000,--,补码,二进制,反码,原码,1000
From: https://blog.51cto.com/u_15202985/6010268

相关文章

  • 【学习日志】Java8的CompletableFuture
    Java8引入的CompletableFuture,对Future做了改进:1.可以传入回调对象,不再像Future那样循环查询执行结果。2.另外可以将多个Future结合到一起并行或串行执行,主要方法如下:......
  • 循序渐进,学习开发一个RISC-V上的操作系统 5.1答案
    现知道某条RISC-V的机器指令在内存中的值为b3059500,从左往右为从低地址到⾼地址,单位为字节,请将其翻译为对应的汇编指令。解:risc-v是小端模式将这个16进制的数倒......
  • 九、十 (控制服务和守护进程、配置和保护ssh)
    九、控制服务和守护进程(重点、考试必考)掌握一条命令:systemcontrol     我们只关注service单元  下边几个命令是本章重点       ......
  • Ubuntu terminal路径太深,名字太长
    在打开shell的时候,如果路径太深,那么shell前面的名字就太长了,占据太大的空间​​cp~/.bashrc~/.bashrc-bak​​​​vi~/.bashrc​​找到:62​​PS1='${debian_chro......
  • 几种常见的主板类型
     001、    ITX:ITX板型主板尺寸为170mm*170mm,迷你装机不二之选。M-ATX:紧凑型Micro-ATX主板,尺寸为244x244mm,也就是常说的“小板”主要用以一些小机箱。例如......
  • static的作用
    C语言中static的作用分类编程技术在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译......
  • Curve 文件存储在 Elasticsearch 冷热数据存储中的应用实践
    Elasticsearch在生产环境中有广泛的应用,本文介绍一种方法,基于网易数帆开源的Curve文件存储,实现Elasticsearch存储成本、性能、容量和运维方面的显著提升。ES使用Curve......
  • 时间转换
    特殊:字符串"yyyy-MM-dd"格式的时间想要转换成Date类型同样格式的时候,总是转换不好,会变成英文格式(SatMar2300:00:00GMT+08:001957)的时间。就试试下面的方法。//获......
  • JSP 标准标签库JSTL
    JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。除了这些,它还提供了......
  • gcc 流程
    ......