进制转换和原码补码
进制转换与原、反、补码(xianyun)
例如:当n=8(单字节),十进制数+19和-19的反码表示为:
[+19]反=0 001 0011
[-19]反=1 110 1100
补码表示法
表示方法:正数的补码与原码、反码相同,负数的 补码是其绝对值的二进制表示按各位取反(0变1,1 变0)加1,即为其反码+1。
例如:当n=8(单字节),十进制数+19和-19的补码表示 为: [+19]补=0 001 0011 [-19]补=1 110 1101
n=8(单字节)
[+19]原
原码 0 001 0011
反码 0 001 0011
补码 0 001 0011
[-19]原
1 001 0011
1 110 1100
1 110 1101
总结
①一个正数的原码、反码和补码的表示形式相同,符号位置0, 其它位是数的真值。
负数的原码 负数的反码 负数的补码 符号位→1 其余位是该数的绝对值 符号位→1 其余各位逐位取反 符号位→1 其余各位逐位取反,末位加1
Hale Waihona Puke ②真值零的表示:[+0]原=000…0 [-0]原=100…0 不唯一
[+0]反=000…0
[+0]补=00…0
[-0]反=111…1
[-0]补=00…0
不唯一
唯一
总结
③数的原码表示形式简单,适于乘除运算,但用 原码表示的数进行加减运算比较复杂;引入补码 以后,减法运算可以用加法来实现([X-Y]补=[X] 补-[Y]补=[X]补+[-Y]补),且数的符号位也可 以当作数值一样参加运算,因此在计算机中大都 采用补码来进行加减运算。
原码表示法
表示方法:原码表示方法中,数值用绝对值表示,在 数值的最左边用“0”和“1”分别表示正数和负数, 书写成[X]原表示X的原码。
原码、反码、补码
原码、反码、补码⼀、什么是原码、反码、补码原码:将⼀个整数,转换成⼆进制,就是其原码。
如单字节的5的原码为:0000 0101;-5的原码为1000 0101。
反码:正数的反码就是其原码;负数的反码是将原码中,除符号位以外,每⼀位取反。
如单字节的5的反码为:0000 0101;-5的反码为1111 1010。
补码:正数的补码就是其原码;负数的反码+1就是补码。
如单字节的5的补码为:0000 0101;-5的补码为1111 1011。
⼆、为什么要有这三类码计算机只能识别0和1,使⽤的是⼆进制。
⽽在⽇常⽣活中⼈们使⽤的是⼗进制,并且我们⽤的数值有正负之分。
于是在计算机中就⽤⼀个数的最⾼位存放符号(0为正,1为负)。
这就是机器数的原码了。
有了数值的表⽰⽅法就可以对数进⾏算术运算,但是很快就发现⽤带符号位的原码进⾏乘除运算时结果正确,⽽在加减运算的时候就出现了问题,如下:假设字长为8bits(1) 10 - (1)10 = (1)10 + (-1)10 = (0)10(0 0000001)原 + (1 0000001)原 = (1 0000010)原 = ( -2 ) 显然不正确。
因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数⾝上。
对除符号位外的其余各位逐位取反就产⽣了反码。
反码的取值空间和原码相同且⼀⼀对应。
下⾯是反码的减法运算:(1)10 - (1)10 = (1)10 + (-1)10= (0)10(0 0000001)反 + (1 1111110)反 = (1 1111111)反 = ( -0 ) 有问题。
(1)10 - (2)10 = (1)10 + (-2)10 = (-1)10(0 0000001)反 + (1 1111101)反 = (11111110)反 = (-1) 正确。
问题出现在(+0)和(-0)上,在⼈们的计算概念中零是没有正负之分的。
(印度⼈⾸先将零作为标记并放⼊运算之中,包含有零号的印度数学和⼗进制计数对⼈类⽂明的贡献极⼤)。
举例说明真值,原码,补码之间的转换方法
举例说明真值,原码,补码之间的转换方法真值、原码与补码之间的转换一、真值的表示方法真值是指一个数的实际数值,可以是正数、负数或零。
真值的表示方法可以通过以下三种方式来描述: - 原码:用二进制表示一个数的绝对值,最高位表示符号位,0表示正数,1表示负数。
- 反码:对于正数,其反码和原码相同;对于负数,将其各位取反,并将符号位设为1。
- 补码:对于正数,其补码和原码相同;对于负数,将其反码末位加1。
二、原码、反码和补码之间的转换原码、反码和补码之间可以相互转换,下面将分别介绍各种转换方式。
1. 原码转反码•对于正数而言,其原码、反码和补码相同,因此不需要进行转换。
•对于负数而言,原码转换为反码的方法是将其各位取反。
2. 原码转补码•对于正数而言,其原码、反码和补码相同,因此不需要进行转换。
•对于负数而言,原码转换为补码的方法是先求其反码,然后将反码末位加1。
3. 反码转原码•对于正数而言,其反码、原码和补码相同,因此不需要进行转换。
•对于负数而言,反码转换为原码的方法是将其各位再次取反。
4. 反码转补码•对于正数而言,其反码、原码和补码相同,因此不需要进行转换。
•对于负数而言,反码转换为补码的方法是先将反码末位加1。
5. 补码转原码•对于正数而言,其反码、原码和补码相同,因此不需要进行转换。
•对于负数而言,补码转换为原码的方法是先减去1,然后再将其各位取反。
6. 补码转反码•对于正数而言,其反码、原码和补码相同,因此不需要进行转换。
•对于负数而言,补码转换为反码的方法是先将补码减去1,然后再将其各位取反。
三、转换示例下面通过一些例子来演示真值、原码、反码和补码之间的转换。
1.假设有一个正数 +5,其原码、反码和补码都为。
2.假设有一个负数 -4,其原码为,反码为,补码为。
3.将负数 -4 的原码转换为补码,首先求反码:,再将反码末位加1,得到补码:。
4.将正数 +5 的补码转换为原码,首先减去1得到反码:=,再将反码各位取反得到原码:。
记忆和转换原码、反码、补码和移码其实很简单!
记忆和转换原码、反码、补码和移码其实很简单!最近在备战软考,复习到计算机组成原理的时候,看到书中关于原码、反码、补码和移码的定义异常复杂。
看完这些定义以后,我的脑袋瞬间膨胀到原来的二倍!这样变态的公式不管你记不记得住,反正我是记不住!还好,以前对它们有所了解,否则看到这一堆公式,恐怕我早就放弃参加软考的念头了。
其实,没必要弄得这么麻烦,它们完全可以用一两句话就描述得很清楚。
原码:如果机器字长为n,那么一个数的原码就是一个n位的二进制数有符号数,其中最高位为符号位:正数为0,负数为1。
剩下的n-1位为数值位,表示真值的绝对值。
凡不足n-1位的,小数在最低位右边加零;整数则在最高位左边加零来补足n-1位。
例如:X = +101011,[X]原= 0010 1011;X = -101011,[X]原= 1010 1011。
注意:正数的原、反、补码都一样。
0的原码跟反码都有两个,因为这里0被分为+0和-0。
反码:知道了原码,那么你只需要具备区分0跟1的能力就可以轻松求出反码。
因为反码就是在原码的基础上,符号位不变,其他位按位取反(就是0变1,1变0)就可以了。
例如:X = -101011,[X]原= 1010 1011,[X]反= 1101 0100。
补码:补码也非常简单,就是在反码的基础上,按照正常的加法运算加1。
例如:X = -101011,[X]原= 1010 1011 ,[X]反= 1101 0100,[X]补= 1101 0101。
也可以在原码的基础上,符号位不变,从右至左遇到第一个1以前(包括这个1)什么都不变,以后按位取反即可。
[X]原= 1000 0110,[X]补= 1111 1010注意:0的补码是唯一的,如果机器字长为8,那么[0]补=0000 0000。
移码:移码最简单了,不管正负数,只要将其补码的符号位取反即可。
例如:X = -101011,[X]原= 1010 1011,[X]反= 1101 0100,[X]补= 1101 0101,[X]移= 0101 0101。
进制转换以及原码、反码、补码
进制转换以及原码、反码、补码2进制,⽤两个阿拉伯数字:0、1;8进制,⽤⼋个阿拉伯数字:0、1、2、3、4、5、6、7;10进制,⽤⼗个阿拉伯数字:0、1、2、3、4、5、6、7、8、9;16进制,⽤⼗六个阿拉伯数字:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F(A是10)后缀:O表⽰⼋进制数 H表⽰⼗六进制 B表⽰⼆进制 D表⽰⼗进制数8进制是⽤3位⼆进制数来代替每⼀位⼋进制数16进制是⽤4位⼆进制数来代替每⼀位⼗六进制数1010进制数转换为⼏进制就除以⼏,直到除到商为0,则所有余数的倒序则为转换结果!22 -> 8 :把⼆进制数每三位⼀组,然后每三位的最⾼位为4,第⼆位为2,最低位为1((1100100)2=(001 100 100)2=(1 4 4)8)2 -> 10 :利⽤权值计算:0110 0100,转换为10进制为0 * 2 ^ 0 + 0 * 2 ^ 1 + 1 * 2 ^ 2 + 0 * 2 ^ 3 + 0 * 2 ^ 4 + 1 * 2 ^ 5 + 1 * 2 ^ 6 + 0 * 2 ^ 7 = 1002 -> 16 :把⼆进制数每四位⼀组,分别转换为⼗六进制(利⽤权值计算),每四位的最⾼位为8,第⼆位为4,第三位为2,最低位为1 11101101转换⽅法:结果为ED⾼位:1110=1x8 + 1x4 + 1x2 + 0x1=(14)⼗进制=(E)⼗六进制,8为2的三次⽅权值,4为2的⼆次⽅权值低位:1101=1x8 + 1x4 + 0x2 + 1x1=(13)⼗进制=(D)⼗六进制,88 -> 2 :每位⼋进制数⽤3位⼆进制数表⽰(37.416)8 =>011 111 .100 001 110 =>(11111.10000111)2 然后每三位的最⾼位为4,第⼆位为2,最低位为18 -> 10 :利⽤权值计算:⼋进制数第0位的权值为8的0次⽅,第1位权值为8的1次⽅,第2位权值为8的2次⽅...将⼋进制数12.6转换成⼗进制数(12.6)8 = 1×8^1 + 2×8^0 + 6×8^-1 = (10.75)108 -> 16 :先将⼋进制化为⼆进制,再将⼆进制化为⼗六进制⼋进制数256 转换为16进制数=(三位⼀组) 010, 101, 110 =(四位⼀组) 0, 1010, 1110 = 0AE = AE1616 -> 2 :⼀位⼗六进制对应四位⼆进制数,每四位的最⾼位为8,第⼆位为4,第三位为2,最低位为1⼗六进制数3FC3H转换为相应的⼆进制数: 将3FC3H从低位开始转换3 --- 0011C --- 1100F --- 11113 --- 0011将对应的⼆进制数按顺序排好,转换成⼆进制数的结果是0011 1111 1100 0011, 即1111111100001116 -> 8 :先转为⼆进制再转为⼋进制⼗六进制16AH转化为⼋进制数:(16A)H =(0001 0110 1010)B = (101 101 010)B = (552)这个是⼋进制16 -> 10 :16进制数第0位的权值为16的0次⽅,第1位权值为16的1次⽅,第2位权值为16的2次⽅……7E8FF*16^0+8*16^1+E*16^2+7*16^3=323992816101010进制的⼩数转换为其他进制数的情况:整数位:10进制数转换为⼏进制就除以⼏,直到除到商为0,则所有余数的倒序则为转换结果!⼩数位:10进制数转换为⼏进制就乘以⼏,直到乘到为整数,则所有整数位的正序则为转换结果!(0.3125*8=2.5 整数位为2 0.5*8=4 整数位为4 则⼩数位的结果为24)1原码表⽰法是机器数的⼀种简单的表⽰法。
十进制数+25与-25的原码、反码与补码
十进制数+25与-25的原码、反码与补码原码、反码与补码是用来表示有符号数的一种方法,在计算机中广泛应用。
十进制数+25和-25的原码、反码与补码可以通过一定的计算得到。
首先,让我们来看+25的原码、反码与补码。
+25的二进制表示为00011001。
这是因为25的二进制表示为11001,但由于是正数,所以符号位为0。
所以+25的原码、反码与补码都是00011001。
接下来,我们来看-25的原码、反码与补码。
首先,-25的绝对值的二进制表示为11001。
在计算原码时,需要将符号位改为1,即11101001。
而反码则是将除符号位外的其他位取反,即10010110。
最后,补码是在反码的基础上加1,即10010111。
原码、反码与补码的转换方式虽然看起来有些复杂,但它们有着很强的逻辑性和规律性。
在计算机中,使用这些方法可以很好地表示有符号数,并进行相应的运算。
原码、反码与补码的好处在于,它们可以直观地表示有符号数,并且可以进行加减运算。
而且,使用补码表示负数有一个很大的优势,就是在进行加减运算时,不需要额外的处理。
比如,如果要计算-25+25,只需要将两个补码相加,然后把结果的补码形式转换回原码即可得到正确的答案。
原码、反码与补码的形式在计算机系统的设计中也有着广泛的应用。
通过使用原码、反码与补码,计算机可以很方便地进行有符号数的运算,而且可以节省大量的硬件资源和时间。
在实际应用中,除了原码、反码与补码之外,还有一种称为补数的表示方法。
补数也可以用来表示有符号数,并且可以进行相同的运算。
补数表示法的好处在于,它只需要一种表示负数的方式,而且可以直接进行加减运算,更加简洁和高效。
总的来说,原码、反码与补码是在计算机系统中常用的一种有符号数表示方法。
通过这种表示方法,可以很方便地进行有符号数的运算,并且可以节省硬件资源和时间。
在实际应用中,还可以结合补数表示法,使得有符号数的表示更加简洁和高效。
原码、反码与补码的规则虽然看起来有些复杂,但一旦掌握了相关的转换方法,就可以很好地理解和应用,为计算机系统的设计和运算提供了很大的便利。
二进制_八进制_十进制_bcd码_十六进制_相互转化_及计算机中的补码反码原码
n=8时,范围为-127~+127
1.2.1
(3)补码
带符号数的编码
0X1X2 … Xn-1 1X1X2 … Xn-1 +1 ( X≥0) ( X≤0)
[X]补=
0表示正,1表示负,负数的补码表示为它的反码在最后位加1。 在计算机里把负数变为补码,是为了把减法变成加补码来进行。 (-87)10=11010111 ——原码表示 (-87)10=10101000 ——反码表示 (-87)10=10101001 ——补码表示 n位补码的表示范围: -2n-1~ +(2n-1-1)
无符号数的表示范围:
8位二进制无符号数:0~255 16位二进制无符号数:0~65535(216-1) 32位二进制无符号数:0~232-1
1.2.2
数的表示形式
微机中所能表示的数值类型
(1)无符号二进制数 字节、字、双字 (2)带符号的二进制定点整数 整数、短整数、长整数
(3)带符号的二进制浮点数
例: 1. (10100111000001.0110)2
=(24701.3)8 =(29C1.6)16
2. (
2
2 A C. 7 B )16 =(0010 1010 1100 . 0111 1011)
1.2
计算机中数值数据的编码和表示
机器数与真值
实际运算中,数是有正负的,计算机中数也有正 负,通常用一个数的最高位表示符号,如果字长 为8位,分别为D7 ~~ D0,那么D7为符号位, 0表示 正数,1表示负数;D6 ~ D0为数值位。 如: 11010111B=-87 这样,在计算机中,连同符号一起数码化的数, 就称为机器数,如上例中的11010111;而使用 正负号加其绝对值的表示方法,称为该数的真值, 如上例中的-87和-1010111B。
c语言 原码,反码和补码的转换方法
c语言原码,反码和补码的转换方法篇一:在 C 语言中,原码、反码和补码是三种不同的数据表示方式。
原码是最原始和最基本的表示方式,用二进制位来表示数字,其中最高位为符号位,用于表示正负。
反码是在原码的基础上将最高位转换为符号位,其余位表示数字的补数,也就是将原码取反得到反码。
补码是在原码的基础上将最高位设置为符号位,其余位表示数字的补数,也就是将原码取模得到补码。
下面是 C 语言中原码、反码和补码的转换方法:1. 原码转换为反码:- 将原码左移一位,即将最高位移动到最低位,得到补码;- 如果补码为 0,则原码为正数;- 如果补码为 1,则原码为负数。
2. 反码转换为补码:- 将反码右移一位,即将最低位移动到最高位,得到补码;- 如果补码为 0,则反码为正数;- 如果补码为 1,则反码为负数。
3. 补码转换为原码:- 将补码左移一位,即将最高位移动到最低位,得到原码;- 如果原码为 0,则补码为正数;- 如果原码为 1,则补码为负数。
下面是一个简单的示例,演示了如何将一个整数的原码转换为反码和补码: ```c#include <stdio.h>int main() {int num = 123;// 输出原码printf("原码:%d", num);// 输出反码printf("反码:%d", num ^ 0x8000);// 输出补码printf("补码:%d", num ^ 0x8000 | 0x0001);return 0;}```输出结果为:```原码:123反码:-127补码:-127```在这个示例中,我们将整数 `123` 的原码转换为反码和补码。
首先,我们将原码左移一位得到补码,即 `123 ^ 0x8000 = 11111011 11111100`。
然后,我们将补码取反得到反码,即 `11111011 11111100 ^ 0x0001 = -127 ^ 0x7F80 = -127`。
十六进制补码和原码的转化
十六进制补码和原码的转化进行算法计算时,常常用到byte类型与十六进制之间的转化,一涉及到负数有时就犯迷糊,先整理记录下来。
1.首先,任何一个数或符号在计算机中,都是以二进制的形式存储的。
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。
机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是。
如果是 -3 ,就是。
那么,这里的和就是机器数(但-3在计算中的实际存储中,并不是以的形式存在,详见3)。
因为第一位是符号位,所以机器数的形式值就不等于真正的数值。
例如上面的有符号数,其最高位1代表负,其真正数值是 -3 而不是形式值131(转换成十进制等于131)。
所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。
例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值= –000 0001 = –12.下面谈一下十进制、八进制与十六进制。
而现实中我们所熟悉的十进制数,可能是先人还没发明计算机之前的计算方式吧(呵呵,扯远了)。
后来有了计算机,单纯的使用二进制表示数,有时人闹反应出我们所熟悉的十进制数比较慢(反之,由十进制在人脑中隐射成二进制亦然),而实际情况中对于3位与8位的二进制经常出现,所以又有了8进制与16进制,而8进制的7正好对应二进制111,如下。
八进制二进制真值7 11177 111111777十六进制的f对应二进制的1111,转化很方便也很好反应,如下十六进制二进制真值F 1111FFFFF 111而十进制与二进制却没有这个形式上的直观反应,如十进制中的9对应二进制的1001.99对应二进制的1100011没有什么直观规律可言。
所以在二进制的基础之上又发明了8进制与16进制。
(以上纯属个人臆想,只是为了自己理解方面,不可作为论断来看,权当一个小论述吧)3.关于原码、补码、反码。
进制的转换原码、反码、补码
进制的转换原码、反码、补码科名片英文名称:Hex number system,是计算机中数据的一种表示方法。
同我们日常中的十进制表示法不一样。
它由0-9,A-F组成,字母不区分大小写。
与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0---(N-1)的数表示超过9的用字母A-F。
目录举例说明转换表达方法各码转换变量总结标准表示展开举例说明转换表达方法各码转换变量总结标准表示展开编辑本段举例说明10进制的32表示成16进制就是:2016进制的20表示成10进制就是:2×16^1+0×16^0=32编程中,我们常用的还是10进制.毕竟C/C++是高级语言。
比如:int a = 100,b = 99;不过,由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决问题。
但二进制数太长了。
比如int 类型占用4个字节,32位。
比如100,用int类型的二进制数表达将是:0000 0000 0000 0000 0110 0100面对这么长的数进行思考或操作,没有人会喜欢。
因此,C,C++ 没有提供在代码直接写二进制数的方法。
用16进制或8进制可以解决这个问题。
因为,进制越大,数的表达长度也就越短。
不过,为什么偏偏是16或8进制,而不其它的,诸如9或20进制呢,2、8、16,分别是2的1次方、3次方、4次方。
这一点使得三种进制之间可以非常直接地互相转换。
8进制或16进制缩短了二进制数,但保持了二进制数的表达特点。
在下面的关于进制转换的课程中,你可以发现这一点。
编辑本段转换二进制转换十进制二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……所以,设有一个二进制数:101100100,转换为10进制为:356用横式计算0 X2^0 + 0X 2^1 + 1X 2^2 + 0X2^3 + 0X2^4 + 1 X2^5 + 1 X2^6 + 0 X 2^7 + 1X 2^8 =3560乘以多少都是0,所以我们也可以直接跳过值为0的位:1X 2^2 + 1 X2^5 + 1X 2^6 + 1X 2^8 = 3564 + 32 + 64 + 256 =356八进制转换十进制八进制就是逢8进1。
原码,反码,补码及运算
原码,反码,补码及运算一、定义1.原码正数的符号位为0,负数的符号位为1,其它位按照一般的方法来表示数的绝对值。
用这样的表示方法得到的就是数的原码。
【基准2.13】当机器字长为8十一位二进制数时:x=+1011011[x]原码=01011011y=+1011011[y]原码=11011011[+1]原码=00000001[-1]原码=10000001[+127]原码=01111111[-127]原码=11111111原码则表示的整数范围就是:-(2n-1-1)~+(2n-1-1),其中n为机器字长。
则:8十一位二进制原码则表示的整数范围就是-127~+12716十一位二进制原码则表示的整数范围就是-32767~+327672.反码对于一个带符号的数来说,正数的反码与其原码相同,负数的反码为其原码除符号位以外的各位按位取反。
【基准2.14】当机器字长为8十一位二进制数时:x=+1011011[x]原码=01011011[x]反码=01011011y=-1011011[y]原码=11011011[y]反码=10100100[+1]反码=00000001[-1]反码=11111110[+127]反码=01111111[-127]反码=10000000负数的反码与负数的原码存有非常大的区别,反码通常用做谋补码过程中的中间形式。
反码则表示的整数范围与原码相同。
3.补码正数的补码与其原码相同,负数的补码为其反码在最低位加1。
导入补码以后,计算机中的以此类推运算都可以统一化成补码的乘法运算,其符号位也参予运算。
【例2.15】(1)x=+1011011(2)y=-1011011(1)根据定义存有:[x]原码=01011011[x]补码=01011011(2)根据定义存有:[y]原码=11011011[y]反码=10100100[y]补码=10100101补码表示的整数范围是-2n-1~+(2n-1-1),其中n为机器字长。
进制转换转换以及原码反码和补码
常⽤数制表⽰法⼗进制⼆进制⼋进制⼗六进制8421BCD 码0000000011110001210220010311330011410044010051015501016110660110711177011181000108100091001119100110101012A 0001 000011101113B 0001 000112110014C 0001 001013110115D 0001 001114111016E 0001 010015111117F0001 0101进制转换转换以及原码反码和补码⼀、进制转换 1、数制和码制 1、⼆进制数与⼗进制数之间的转换 转换原则:按权展开相加,将⼆进制数写成N 的各次幂之和形式,然后按⼗进制计算结果。
(10111101)2 = 1x27+0x26+1x25+1x24+1x23+1x22+0x21+1x20 = (189)10 2、⼆进制转⼋进制 ⼆进制(1 110 110 111 011 100)2 = (166734)8 ⼋进制 1 6 6 7 3 4 3、⼆进制转⼗六进制 ⼆进制 (1101 1001 1110 0100)2 = (D9E4)16 ⼗进制 13 9 14 4 ⼗六进制 D 9 E 44、⼆进制转8421bcd 码 ⼆进制转8421bcd 码不能直接转,通常⼆进制数先转为⼗进制数,再转为bcd 码 (1101)2 = (13)10 = (0001 0011)bcd 5、M 进制向⼗进的转换 转换原则:按权展开相加,将M 进制数写成N 的各次幂之和形式,然后按⼗进制计算结果。
(5213)6 = 5 x 63 + 2 x 62+ 1 x 61+ 3 x 60 = (1186)106、⼗进制向N 进制的转换 转换原则:⼗进制数除N 后倒取余 (150)10 = (226)8 ⼆、原码反码和补码 ⼆进制数中,第⼀位为符号位,1表⽰负数,0表⽰正数1、正数:反码补码和原码⼀样2、负数: 原码:最⾼位是1,后⾯是其绝对值的⼆进制数 反码:符号位不变,数据位按位取反 补码:在其反码的最后⼀位+13、计算 在计算机中运算中,加减法是⾼频运算,使⽤同⼀个运算器,可以减少中间变量存储的开销,这样也降低了CPU内部的设计复杂度 减去⼀个数等于加上这个数的负数 两个正数正数相加时,按照⼆进制加法直接计算即可 如果有负数参与计算时则要使⽤其补码来参与计算。
补码进制转换详解 , 补码详解 ,进制转换详解
由于十六进制转换成二进制相当直接,所以,我们需要将一个十进制数转换成 2 进制数时,也可以 先转换成 16 进制,然后再转换成 2 进制。 比如,十进制数 1234 转换成二制数,如果要一直除以 2,直接得到 2 进制数,需要计算较多次数。 所以我们可以先除以 16,得到 16 进制数:
被除数 计算过程 商
记住 8421,对于任意一个 4 位的二进制数,我们都可以很快算出它对应的 10 进制值。
下面列出四位二进制数 xxxx 所有可能的值(中间略过部分)
仅 4 位的 2 进制数 快速计算方法 十进制值
1111 = 8 + 4 + 2 + 1 = 15
F
1110 = 8 + 4 + 2 + 0 = 14
逻辑判断 用&或者&&做比较时,好像是一个效果啊 false & false 结果是 false
true & true 结果是 true
false && false true && true
结果是 false 结果是 true
其实他们之间有一个很大的差别:短路 举个例子来解释一下吧, false &true-->false false&&true-->false 单从结果上看,他们结果是一样的,都是 false 但是前者在运行的时候,计算机首先判断第一个条件为 false,然后判断第二个条件 true,然后判断 出结果为 false 而后者,首先也是判断第一个条件,当判断出为 false 时,程序立即终止,因为不管第二个条件是 什么,结果一定为 false
1000……………………01 (原码)负数的反码转换为原码 1000……………………01 原码
网络工程师计算题
1.各种进制转换、原码反码补码转换、内存芯片容量计算:●R进制转十进制:(234.01)8=(2*82+3*81+4*80+0*8-1+1*8-2)10●十进制转R进制:除以R取余法●二进制和八进制的转换:将每个8进制数转为3位二进制数●二进制和16进制的转换:将每个16进制数转为4位二进制数●两个16进制数如何相加:直接进行相对应的位的相加。
●两个16进制数如何异或:转为二进制,相对应位异或,再转为16进制。
●原码:将一个整数写成二进制并加符号位就是原码。
符号位最高位0为正1为负。
●反码:正数的反码就是原码;负数的反码是除符号位外每一位取反。
●补码:正数的补码就是原码;负数的补码是反码+1。
●移码:符号位和补码相反。
●逻辑异或的公式:相同逻辑变量异或结果为0;相异逻辑变量异或结果为1。
2.海明校验码、CRC校验码的计算●海明码:2^校验位>=数据位+1●海明码纠正X 位错误,需要2X+1 位冗余位3.信道的理想数据速率计算;最大数据速率计算●理想数据速率=带宽*2*log2码元种类●最大数据速率=带宽*log21+信噪比=带宽*log21+10分贝数/10●信道波特率=带宽*2●卫星传输的延时是270ms●信息速率=码元速率*log2进制●电缆速度是光速的三分之二。
●总时延=传播时延+发送时延+排队时延●数据传播时延s=数据帧长度b/数据传输速率bps●信号传播时延μs=两点间距离m/信号传播速度m/μs。
信号传播速度是20万公里/秒即200mμ/s。
4.路由汇聚计算方法:写出二进制代码,看有多少位网络位相同5.子网划分计算方法:将每个IP和掩码进行逻辑乘,值相同就在同一个子网210=1024-127的原码是11111111-1的补码也是11111111已知网络地址块中的1个地址和该网络的掩码,如何写出这个网络的最小地址和最大地址:举例:已知1个地址是:10101100已知该网络掩码:11100000则:该网络最小地址:10100000 (前面网络位取相同,后面主机位取全0)该网络最大地址:10111111 (前面网络位取相同,后面主机位取全1)如果是公网,则最小可用地址:10100001最大可用地址:10111110如果是子网,则最小地址和最大地址都可以用。
原码、反码、补码之间的相互关系
原码、反码、补码之间的相互关系1、10001的补码是取反后在再加1,也就是11110+1=11111;2、如果是11111变回原码呢?我们可以采取逆过程先减1,11111-1=11110,再取反变为10001;3、如果要是在补码变原码时先去反再加⼀呢?(就是问题中的说法)结果为11111先取反为10000,再加1,10000+1=10001。
这个结果与2是⼀样的,并且也是和1中的原码相吻合。
在取反前减1和在取反后加1的效果是⼀样的。
这就和-3-1=-(3+1)是⼀个道理。
计算机保存最原始的数字,也是没有正和负的数字,叫没符号数字如果我们在内存分配4位(bit)去存放⽆符号数字,是下⾯这样⼦的后来在⽣活中为了表⽰“⽋别⼈钱”这个概念,就从⽆符号数中,划分出了“正数”和“负数”正如上帝⼀挥⼿,从混沌中划分了“⽩天”与“⿊夜”为了表⽰正与负,⼈们发明了"原码",把⽣活应该有的正负概念,原原本本的表⽰出来把左边第⼀位腾出位置,存放符号,正⽤0来表⽰,负⽤1来表⽰但使⽤“原码”储存的⽅式,⽅便了看的⼈类,却苦了计算机我们希望(+1)和(-1)相加是0,但计算机只能算出0001+1001=1010 (-2)这不是我们想要的结果 (╯' - ')╯︵┻━┻另外⼀个问题,这⾥有⼀个(+0)和(-0)为了解决“正负相加等于0”的问题,在“原码”的基础上,⼈们发明了“反码”“反码”表⽰⽅式是⽤来处理负数的,符号位置不变,其余位置相反当“原码”变成“反码”时,完美的解决了“正负相加等于0”的问题过去的(+1)和(-1)相加,变成了0001+1101=1111,刚好反码表⽰⽅式中,1111象征-0⼈们总是进益求精,历史遗留下来的问题—— 有两个零存在,+0 和 -0我们希望只有⼀个0,所以发明了"补码",同样是针对"负数"做处理的"补码"的意思是,从原来"反码"的基础上,补充⼀个新的代码,(+1)我们的⽬标是,没有蛀⽛(-0)有得必有失,在补⼀位1的时候,要丢掉最⾼位我们要处理"反码"中的"-0",当1111再补上⼀个1之后,变成了10000,丢掉最⾼位就是0000,刚好和左边正数的0,完美融合掉了这样就解决了+0和-0同时存在的问题另外"正负数相加等于0"的问题,同样得到满⾜举例,3和(-3)相加,0011 + 1101 =10000,丢掉最⾼位,就是0000(0)同样有失必有得,我们失去了(-0) , 收获了(-8)以上就是"补码"的存在⽅式结论:保存正负数,不断改进⽅案后,选择了最好的"补码"⽅案⼆进制数在内存中以的形式存储。
进制转换及原码反码补码练习题
进制转换练习题[例题1-1] 十进制数1000对应二进制数为______,对应十六进制数为______.供选择的答案A:①1111101010 ②1111101000 ③1111101100 ④1111101110B:①3C8 ②3D8 ③3E8 ④3F8[例题1-2] 十进制小数为0.96875对应的二进制数为______,对应的十六进制数为______.供选择的答案A:①0.11111 ②0.111101 ③0.111111 ④0.1111111B:①0.FC ②0.F8 ③0.F2 ④0.F1[例题1-3] 二进制的1000001相当十进制的______,二进制的100.001可以表示为______.供选择的答案A:①62 ②63 ③64 ④65B:①23+2–3②22+2–2③23+2–2④22+2–3[例题1-4] 十进制的100相当于二进制______,十进制的0.110011相当二进制的______.供选择的答案A:①1000000 ②1100000 ③1100100 ④1101000B:①2–1+2–2+2–4+2–5②1–<2–3+2–4>③1+<–2–3–2–4> ④1–2–3–2–4–2–6[例题1-5] 八进制的100化为十进制为______,十六进制的100化为十进制为______.供选择的答案A:①80 ②72 ③64 ④56B:①160 ②180 ③230 ④256[例题1-6] 在答案群所给出的关系式中正确的为______,在给出的等式中不正确的为______.供选择的答案A:①0.1112<0.7510②0.78>0.C16③0.610>0.AB16④0.1012<0.A16B:①0.87510=0.E16②0.748=0.937510③0.1012=0.A16④0.3116=0.1418[例题1-7] 十六进制数FFF.C H相当十进制数______.供选择的答案A:①4096.3②4096.25③4096.75④4095.75[例题1-8] 20##可以表示为______年;而37308年是指______年.供选择的答案A:①7C5H②6C5H③7D5H④5D5HB:①200010②200210③200610④200810[例题1-10] 二进制数10000.00001可以表示为______;将其转换成八进制数为______;将其转换成十六进制数为______.供选择的答案A:①25+2–5②24+2–4③25+2–4④24+2–5B:①20.02 ②02.01 ③01.01 ④02.02C:①10.10 ②01.01 ③01.04 ④10.08[例题1-11] 对于不同数制之间关系的描述,正确的描述为______.供选择的答案A:①任意的二进制有限小数,必定也是十进制有限小数.②任意的八进制有限小数,未必也是二进制有限小数.③任意的十六进制有限小数,不一定是十进制有限小数.④任意的十进制有限小数,必然也是八进制有限小数.[例题1-12] 二进制整数1111111111转换为十进制数为______,二进制小数0.111111转换成十进制数为______.供选择的答案A:①1021 ②1023 ③1024 ④1027B:①0.9375 ②0.96875 ③0.984375 ④0.9921875[例题1-13] 十进制的160.5相当十六进制的______,十六进制的10.8相当十进制的______.将二进制的0.100111001表示为十六进制为______,将十六进制的100.001表示为二进制为______.供选择的答案A:①100.5 ②10.5 ③10.8 ④A0.8B:①16.8②10.5 ③16.5 ④16.4C:①0.139②0.9C1 ③0.9C4 ④0.9C8D:①28+2–8②28+2–9③28+2–10④28+2–12.[例题1-14] 多项式212+28+21+20表示为十六进制为______,表示为十进制为______.供选择的答案A:①163+162+16–1②163+162+3/1 ③163+162+16④163+162+3B:①4353 ②4354 ③4355 ④4356 [例题1-15] 已知a=0.1,b=0.3,c=0.4,d=0.5,e=0.6,f=0.8,若使a=c,则a为______,c为______;若使d=f,则d为______,f为______,若使b=e,则b为______,e为______.供选择的答案①二进制数②八进制数③十进制数④十六进制数⑤六进制数⑥十二进制数第5页还有练习3 / 3。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
必备基础:
第一部分:进制转换
→二进制(Binary):由0~1构成,逢2进1 11B →3D
八进制(Octal):由0~7构成,逢8进1 11Q →9D
十进制(Decimal):由0~9构成,逢10进1 111D →111D
十六进制(Hex):由0~9、A~F构成,逢16进1 11H →17D
→两个基本概念
基数:n进制基数为n
111.11D = 1*102 + 1*101 + 1*100 + 1*10-1 + 1*10-2
位权:小数点左边第k位位权为:基数k-1
小数点右边第k位位权为:基数-k
→进制转换
1.其他进制→十进制(按权展开求和法)
123.45D = 1*102 + 2*101 + 3*100 + 4*10-1 + 5*10-2
11001.11B = 1*24 + 1*23 + 1*20 + 1*2-1 + 1*2-2 = 16+8+1+0.5+0.25
= 25.75D 123.4Q = 1*82 + 2*81 + 3*80 + 4*8-1 = 64+16+3+0.5 = 83.5D
123.4H = 1*162 + 2*161 + 3*160 + 4*16-1 = 256+32+3+0.25
= 291.25D
2.十进制→其他进制
→整数部分:基数除法,倒序取余。
→小数部分:基数乘法,顺序取整。
76.375D = 1001 100.011 B
= 114.3 Q
= 4C.6 H
276 0.375*2=0.75-------0 ↓
38------0 ↑ 0.75*2=1.5--------1↓
19------0 ↑ 0.5*2=1----------1↓
9------1 ↑
4------1 ↑
2------0 ↑
1------0 ↑
0------1 ↑
8 76 = 114Q 0.375D = 0.3Q
9-----4 ↑ 0.375*8 = 3------3 ↓
1------1 ↑
0------1 ↑
16 76 = 4CH 0.375D = 0.6H
4-----C ↑ 0.375*16 = 6--------6 ↓
0-----4 ↑
3.其他进制之间的互相转换
1)二进制与八进制(3位二进制与1位八进制一一对应“421”)
000→0 100→4
001→1 101→5
010→2 110→6
011→3 111→7
001,100,001B→141Q 001,000,001B→101Q
00,110,001B→61Q
753Q→111 101 011B
2)二进制与十六进制(4位二进制与1位十六进制一一对应“8421”)
0000→0 1000→8
0001→1 1001→9
0010→2 1010→A
0011→3 1011→B
0100→4 1100→C
0101→5 1101→D
0110→6 1110→E
0111→7 1111→F
0111,1101,1110B→7DEH
0110,0001B→61H 0100,0001B→41H
6A7DH→0110 1010 0111 1101B
3)八进制与十六进制
第二部分:数据表示
一、整型数据的分类:
1.无符号整型数据:所有位均表示大小。
N位无符号整型数据表示的取值范围为:0~2N-1
2.带符号整型数据:最高位表示符号:0为正、1为负。
→常用原码、反码、补码表示。
正数:三码同一。
例:已知x=+76D ,写出x的三码表示(8位)
解:x=+76D=+1001100B
因为x>0
所以:[x]原=[x]反=[x]补=01001100B
负数:
例1:已知x= -76D ,写出x的三码表示(8位)
解:x= -76D= -1001100B
[x]原=1 1001100B
[x]反=1 0110011B
[x]补=1 0110100B
例2:已知:[x]原=[y]反=[z]补=1100 1011B,求出x、y、z的大小关系。
[x]原=1100 1011B → x = -100 1011B
[y]反=1100 1011B
→[y]原=1011 0100B → y= -011 0100B
[z]补=1100 1011B
→[z]原=1011 0101B → z= -011 0101B
所以: y>z>x
8位原码的取值范围:1 111 1111B~0 111 1111B即–(27-1)~ 27-1 -127D~+127D [+0]原:0 000 0000B
[-0]原:1 000 0000B
8位补码的取值范围:1 000 0000B~0 111 1111B即 -27 ~ 27-1 -128D~+127D →N位补码的取值范围:-2N-1~2N-1-1
16位补码整数的取值范围:-32768~+32767。