进制

十,八,十六进制=>二进制

十进制=>二进制:辗转相除取余,10除2商5余0,5除2商2余1,2除2商1余0,1除2商0余1,So,10d=1010b
八进制=>二进制:每1位八进制数字对应3位二进制数字,So,012=001_010b
十六进制=>二进制:每1位十六进制数字对应4位二进制数字,So,0x2f=0010_1111b

二进制=>十,八,十六进制

二进制=>十进制:乘方作和,So, 1010b=2^3+2^1=10d
二进制=>八进制:每3位二进制数字对应1位八进制数字,So,001_010b=012
二进制=>十六进制:每4位二进制数字对应1位十六进制数字,So,0010_1111b=0x2f

原码,反码,补码

原码就是在我们上面直接计算得到二进制数字前面加上符号位(0非负1负)
反码负数的反码是原码真值01反转,非负数和原码一样
补码负数的补码是反码+1,非负数的补码和反码和原码一样
Q:计算机中的数字都是用补码的形式存储,WHY?
A:

  1. 假设用4位二进制存储有符号整数,用原码的规则转码,是1111(-2^3-1)~1001(-1)~1000(-0)~0000(+0)~0001(+1)~0111(+2^3-1),你看,这里竟然有+0和-0!用补码的规则转码,会是1000(-2^3)~1001(-2^3-1)~1111(-1)~0000(0)~0001(1)~0111(+2^3-1),补码利用了"溢出"的原理实现了"-0"和"+0"的"统一",按照补码的规则,原码1000的补码是1111+1--溢出--=0000,和+0一样一样的!所以按照补码表示数字的话,0000就是0。
  2. 补码1111对应的原码是1001,即-1,补码1001对应的原码是1111,即-2^3-1,重点来了:补码1000没有对应的原码!所以补码的规则使0只有一种表达方式,但却使原码中表示-0的组合1000无所表达,所以人们就规定,补码1000表示((原码0111对应数字+1)的相反数),即-2^3,至此同样的位数,补码的解读方式比原码的方式多了一个数
  3. 使用补码的更重要的意义在于"让计算机忽略符号位",我们都知道+1+(-1)=0,但是如果用原码解读,0001+1001不为0,如果用补码解读,1111+0001=(1)0000=0,以后计算机进行计算的时候就不需要区分是否是正数+负数了

综上,补码的好处有:

  1. +0和-0统一
  2. 扩大表示的范围
  3. 计算机做加法不再需要考虑符号位

Tips:

  • 一个数的补码的补码就是这个数的原码

进制,原码VS补码的更多相关文章

  1. C中进制, 原码, 反码与补码的简单用法

    /** * 二进制 binary 如: 1010 * 八进制 octal 如: 070 * 十六进制 hexadecimal 如: 0x7f * * 1Byte = 8bits * 1WORD = 2 ...

  2. python之计算机硬件基本认知_数据单位_进制间转换_数的原码反码补码

    一:计算机硬件基本认知 cpu:   中央处理器.   相当于人的大脑.运算中心,控制中心. 内存:  临时存储数据. 优点:读取速度快,缺点:容量小,造价高,断电即消失. 硬盘:  长期存储数据. ...

  3. 大数据学习--day02(标识符、变量、数据类型、类型转换、进制转换、原码反码补码)

    标识符.变量.数据类型.类型转换.进制转换.原码反码补码 标识符: java50个关键字不能做标识符,以数字开头不能做标识符(这个老是忘记写一个类名的时候) 变量: 变量分为成员变量和局部变量,注意作 ...

  4. 原码 & 反码 & 补码 & 详解

    本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...

  5. java变量、二进制、数据类型、原码、补码、反码

    1. 变量  1. 他 她 我 你 某人 佚名 旺财 X-man x = 1     您好! 它    (变量就是自然语言中的代词)  2. int age = 15;// 00000000 0000 ...

  6. Java 原码 反码 补码

    本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...

  7. C语言基础 (4) 原码反码补码与数据类型

    1.回顾 使用gcc编译代码 gcc hello.c -o hello windows下编译代码 C语言编译步骤: 预处理(头文件展开,干掉注释) gcc -E hello.c -o hello.i ...

  8. 位移&二进制转换&原码&反码&补码

    << 左移 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零. 格式 需要移位的数字 << 移位的次数 计算过程 1. 按二进制形式把所有的数字向左 ...

  9. 原码、补码,反码以及JAVA中数值采用哪种码表示

    原码.补码,反码以及JAVA中数值采用哪种码表示 1.原码定义(摘自百度百科):一种计算机中对数字的二进制定点表示方法,原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位 ...

随机推荐

  1. Sprint1(11.20)

    Sprint1第一阶段 1.类名:软件工程-第一阶段 2.时间:11.14-11.23 3.选题内容:web版-餐厅到店点餐系统 4.我们详细分析了点餐系统实现的具体功能,分为两种方案: 方案一:此方 ...

  2. 关于下载DynamicDataDisplay.dll后被默认锁定的问题

    问题:命名空间 d3:“http://research.microsoft.com/DynamicDataDisplay/1.0”不存在ChartPlotter元素 原因:下载DynamicDataD ...

  3. SqlServer定时备份数据库和定时杀死数据库死锁解决

    上周五组长对我说了一句要杀死数据库的死锁进程,有时候同一时刻不停写入数据库会造成这种情况的发生,因为自己对数据库不是很熟悉,突然组长说了我也就决定一定要倒腾一下,不然自己怎么提高呢?现在不研究,说不定 ...

  4. java四大域总结

    最近学完了web部分,发现有些地方总是单个容易理解,可是把所有的放在一起来大杂烩,总是有那么几个知识点容易混淆.其实网上的资料已经够多了,虽然也不乏辛劳的搬运工.可是最终的目的不就是要我们自身理解吗? ...

  5. Erlang 内存泄漏分析

    随着项目越来越依赖Erlang,碰到的问题也随之增加.前段时间线上系统碰到内存高消耗问题,记录一下troubleshooting的分析过程.线上系统用的是Erlang R16B02版本. 问题描述 有 ...

  6. C#读写ini文件操作

    ini文件,是windows操作系统下的配置文件,ini文件是一种按照特点方式排列的文本文件,它的构成分为三部分,结构如下: [Section1] key 1 = value2 key 1 = val ...

  7. 请用fontAwesome代替网页icon小图标

    1. 引言 网页小图标到处可见,如果一个网页都是干巴巴的文字和图片,而没有小图标,会显得非常简陋.下面的小图标,你是不是会经常用到? 你可能说——“我们用的都是彩色的,不是黑白的”——别着急,下面会讲 ...

  8. Javascript中的Label语句

    在javascript中,我们可能很少会去用到 Label 语句,但是熟练的应用 Label 语句,尤其是在嵌套循环中熟练应用 break, continue 与 Label 可以精确的返回到你想要的 ...

  9. JavaScript正则表达式小记

    RegExp.html div.oembedall-githubrepos{border:1px solid #DDD;border-radius:4px;list-style-type:none;m ...

  10. 原生js实现tab选项卡

    1.html部分 <body>        <div id="tab">            <div class="tab_menu& ...