首页 > 其他分享 >cs03_补码

cs03_补码

时间:2022-11-07 22:58:51浏览次数:46  
标签:权重 二进制 补码 cs03 负数 有效 最高

浅聊补码

  今天查资料遇到了补码的概念,可惜已经把专业课老师传授的知识忘得七七八八了,就上网查了下补码的资料,讲解五花八门,读了半天总感觉还是没有关联上自己的知识结构。最终还是从《深入理解计算机系统》上寻求一个精准的答案。

阅读说明

  笔记来自我自己的阅读理解。并不照搬神书内容,有兴趣的朋友可以阅读《深入理解计算机系统》2.2节,形成一个完整的知识体系。

 

在梳理概念前,先说下用到的概念:

  1. 最高有效位

    这里举个简单的例子,十进制数字123,它的最高有效位就是百位的1; 十进制数字54321的最高有效位就是万位的5;通过这两个简单的例子,最高有效位就很好理解了。

  2. 最高有效位的权重

    这里也很简单,123中最高有效位的值是1,权重就是100。当然,补码这块主要讲的是2进制,如二进制数1011 1100,共8位,最高有效位是1,最高有效位的权重就是2^7。

 

 

  所以补码到底是什么呢?

    补码的在CS领域主要作用是用于表示负数,可能有别的用法我还不清楚,但这里主要记录其表示负数的用法。补码的值就是  (-1) * 最高有效位 * 最高有效位的权重 再加上其他位的值

    对于一个普通的二进制数字 1010 1100来说,它的值等于(1*2^7 + 0* 2^6 + 1*2^5 + 0*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 0*2^0)

    对于该二进制,它的补码值和它的差别只有最高有效位的值。即 -1*1*2 ^7,原数字前乘上 -1,再加上剩余部分( 0* 2^6 + 1*2^5 + 0*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 0*2^0)。

    

    这样就解释了有符号数的取址范围为什么负数总比正数多一位,如char的取址范围为 -128 ~ 127。

    众所周知,char 1字节,8bit。如下

    1000 0000 表示 -128,即 -1 * 1 * 2^7

    0111 1111 表示127 

    对于,short,int,double都是同理

标签:权重,二进制,补码,cs03,负数,有效,最高
From: https://www.cnblogs.com/cpp-muggle/p/16867744.html

相关文章

  • 原码、反码、补码知识点总结
    好久没接触这三个熟悉而陌生的概念,以前也没理解透彻这三个概念的真正含义与作用,现在来重新做一个清晰而简单的总结。首先,原码、反码、补码只是机器中对于数字的三种不同的表......
  • java基础-->源码,反码,补码 和位运算
    原码、反码、补码原码:十进制数据的二进制表现形式,最左边的是符号位,0为正,1为负。反码:正数的反码是其本身,负数的反码是符号位保持不变,其余取反。补码:正数的补码是其本身,......
  • 计算机是怎样进行补码运算的
    以int类型为例第32位存储符号,0表示正,1表示负,后面31位表示数值部分,最大为2147483647(231-1);若最高位是0,则直接输出,若为1,则先输出负号,然后对数值取补码后输出。 (1)两个正数......
  • 原码、反码、补码
    补码诞生的背景不论是在生活中还是虚拟网络中,人们总是习惯与10进制数字打交道,很容易理解10进制的加减乘除运算,但是我们知道计算机无法直接理解10进制,只能识别高低电平,一般......
  • 原码、反码、补码
     在计算机运算的时候,都是以补码的形式运算的正数的原码、反码、补码都一样负数的反码=它的原码符号位不变,其余位取反负数的补码=负数的反码+10的反码、补码都是0......
  • Java原码补码反码
    对于一个8位原码,01101010和11000110,求它们的补码。已知补码01101010和11000110,求它们的原码。(要求如题4)注:进制和原码等概念属于计算机编程基础知识,建议了解并熟悉它。答:(1)......
  • 关于负数补码为什么原码是按位取反再+1
     8位下,求123和-123的补码。8位补码表示的值为-128-127。[-123]补码=[-01111011]补码=2^8+(-01111011)......
  • 123按位取反是多少?原码、反码、补码及其运算
    如题,在整数运算中总是不清楚某个数的取反和反码到底有什么区别,遂写下此博客,有参考的地方在文末中会贴出出处。在阅读本文章之后会对你了解计算机中一些基础有所帮助,文章包......
  • 负数补码(16进制转10进制的负数)
    假如我想通过modbustcp接收设备上传的报文,该设备显示为负数,但报文上无法解析出来(温度报文异常,负数无法显示与转换)。这时候,我就需要对这个报文进行负数补码形式,16进制转10......
  • 源码、反码、补码和精度损失
    数据类型转换,转换过程中可能导致溢出或损失精度1.源码:源码就是二进制的数字并且开头的一位代表符号位。例:(+1)的源码:00000001(-1)的源码:100000012.反码:正数......