博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数字逻辑的一些基本运算和概念
阅读量:6295 次
发布时间:2019-06-22

本文共 2987 字,大约阅读时间需要 9 分钟。

进制转换

基数:计数制中所用到的数字符号的个数,比如基数为R的计数制中,含0,1···R-1共R个数字符号,进位规律是“逢R进1”,称为R进制。

位权:在一种进位计数制表示的数中,用来表明不同数位上数值大小的一个固定的常数。不同数位有不同的位权。
比如2进制:10001,第一个1位上的位权为 2^4,第二个1位上的位权为 2^0。

并列表示法:比如 1001001.

多项式表示法:按权展开:1 x 2^6 + 1 x 2^3 + 1 x 2^0.

二转十

10110.101 = 1x2^4 + 1x2^2 + 1x2^1 + 1x2^-1 + 1x2^-3 = 16 + 4 + 2 + 0.5 + 0.125.

十转二

整数转换,除基数取余法:

45 ÷ 2 = 22 ··· 122 ÷ 2 = 11 ··· 011 ÷ 2 = 5 ··· 15 ÷ 2 = 2 ··· 12 ÷ 2 = 1 ··· 01 ÷ 2 = 0 ··· 1得到45的二进制 1 0 1 1 0 1,注意,按照从下往上的顺序。

小数转换,乘二取整法:

0.6875x    2------1.3750 ··· 1x    2------0.7500 ··· 0x    2------1.5000 ··· 1x    2------1.0000 ··· 10.6875的二进制 0.1011,注意,按照从上向下的顺序。

有些时候,无法用有限位二进制表示十进制的小数,就要根据题目的精度要求,将最低位进一然后舍去。

此外,当一个十进制既有整数也有小数,只要把它们分开计算就好了。

八进制,和十六进制,类比即可。需要注意的是:

  • 八转二的时候,每一位八进制数 用三位二进制表示即可,比如 732 -> 111 011 010;十六转二用4位二进制数即可。
  • 二转八的时候,不足补0,比如 二进制 1001 需要看做 001 001 再转成 11。
  • 二转十六的时候,数字十到十五需要用 A - E 表示。

原码,补码,反码

计算机涉及数字的符号问题的时候,需要补充一位符号位,一般在二进制数的最左边,以1为负,以0为正。

原码:

小数:

大于0的小数X,原码为其本身;小于0的小数X,原码为 1-X(相当于在小数点前面补1)。比如:0.1011 -> 0.1011;-0.1011 -> 1.1011
整数:
大于0为它本身,或者在最高位前面补0;小于0在最高位的前面补1。比如:1101 -> 01101;-1101 -> 11101。

反码:

正数的反码为它本身;负数的反码:符号位不变,其他位按位取反。比如:0101111 -> 0101111;1101111 -> 1010000.

整数的方法和小数的方法一样,只不过小数多加了一步,将符号变成小数点前面的1.

补码:

正数与原码,补码一样;负数为取反码之后在最低位+1,有进位则进位;小数和整数一样。

补码反码的计算:

反码的计算

无论进行加还是减的运算,均可以通过加法实现。运算的时候,符号位一起参与计算。

当符号位发生进位的时候,需要将进位加到运算结果的最低位,才能得到结果。

111+ 111-----1 110--->1-----  111

补码的计算

与反码的计算不一样的地方在于,符号位发生进位的时候,将其丢弃。

111+ 111-----1 110->Drop-----  110

几种常用的BCD编码

目的:为了满足计算机使用二进制,而同时满足人们习惯十进制的需求,通常用四位二进制代码对十进制数字进行编码。称为 二-十进制代码。

又称BCD码,具有二进制的形式,又有十进制的特点。

十进制有 0-9 十个数字,就需要四位二进制来表示,一共 2^4 = 16种表示,就会有多余的六个二进制表示。

不管哪种方案都会有多余的六个表示。

分为有权码 和 无权码,有权码是用数字表示的名字,比如8421码,8421就是它的权值。

8421

权:8421;按照最简单的二进制进位来表示。

0 00001 00012 00103 00114 0100------5 01016 01107 01118 10009 1001多余的无效码:1010 -> 1111

转换样例:

(1)258 -> 0010 0101 1000 注意,十进制的每一位都要用四位二进制表示,并且不能舍去0!
(2)0001 0010 0000 1000 -> 1208 按权转换,相加即可,比如 0010 = 8x0 + 4x0 + 2x1 + 1x0,就是BCD码的名字。

如果在计算的过程中,出现了无效位,需要加6(0110)来得到正确的结果。

2421

权:2421;求法:0-4和8421一致,从5开始(比如取到了k,5<=k<=9),计算 9-k 的值,得到 9-k 的2421表示(和8421一样),然后按位取反。

比如 求6的2421码:9 - 6 = 3;3的2421码 和 3的8421码一样 = 0011;按位取反 = 1100.
因此,2421码是 对9的自补代码。

0 00001 00012 00103 00114 0100------5 10116 11007 11018 11109 1111多余的无效码:0101 -> 1010

转换样例:

(1)258 -> 0010 1011 1110
(2)0010 0001 1110 1011 -> 2 1 8 5
0010 = 2x0 + 4x0 + 2x1 + 1x0;1110 = 2x1 + 4x1 + 2x1 + 1x0

5421

权:5421;求法:前面五个 0-4 一样,最后五个,最高位取1,其它三位搬下来。

比如 求5:5找0,0的表示为 0000,那么最高位置1,其它三位搬0000的后三位,形成 1000,就是5的5421码了。

0 00001 00012 00103 00114 0100------5 10006 10017 10108 10119 1100多余的无效码:0101 -> 0111(3个);1101 -> 1111(3个)

转换样例:

(1)258 -> 0010 1000 1011
(2)0010 0001 1100 1011 -> 2 1 9 8
0010 = 5x0 + 4x0 + 2x1 + 1x0;1100 = 5x1 + 4x1 + 2x0 + 1x0

无权码:余3码

就是8421码+3。它也是对9的自补代码。

0 00111 01002 01013 01104 0111------5 10006 10017 10108 10119 1100多余的无效码:0000 -> 0010;1101 -> 1111

转换样例:

(1)258 -> 0101 1000 1011
(2)1000 1001 1001 1011 -> 5 6 6 8
1000 = 8x1 + 4x0 + 2x0 + 1x0 - 3 = 5;1001 = 8x1 + 4x0 + 2x0 + 1x1 - 3 = 6

注意,如果计算没有涉及到进位,则需要-3,如果涉及到进位,则要先按照8421码的更改+6 然后再-3,也就是 +3。

2016/9/9

转载地址:http://vfvta.baihongyu.com/

你可能感兴趣的文章
短址(short URL)
查看>>
第十三章 RememberMe——《跟我学Shiro》
查看>>
mysql 时间函数 时间戳转为日期
查看>>
索引失效 ORA-01502
查看>>
Oracle取月份,不带前面的0
查看>>
Linux Network Device Name issue
查看>>
IP地址的划分实例解答
查看>>
如何查看Linux命令源码
查看>>
运维基础命令
查看>>
入门到进阶React
查看>>
SVN 命令笔记
查看>>
检验手机号码
查看>>
重叠(Overlapped)IO模型
查看>>
Git使用教程
查看>>
使用shell脚本自动监控后台进程,并能自动重启
查看>>
Flex&Bison手册
查看>>
solrCloud+tomcat+zookeeper集群配置
查看>>
/etc/fstab,/etc/mtab,和 /proc/mounts
查看>>
Apache kafka 简介
查看>>
socket通信Demo
查看>>