精华内容
下载资源
问答
  • 二进制转换为8421
    千次阅读
    2021-11-21 15:46:33

    目录

    推导8421码表

    十进制快速转换为二进制

    二进制快速转换为十进制

    二进制转换为八进制

    八进制转二进制

    二进制转换为十六进制

    十六进制转二进制

    其他进制互相转换


    bcd中的8421可以方便地进行进制转换。

    不仅可以实现二进制和其他进制的互转,还可以在其他进制之间进行互转(先转成二进制再进行互转)。

    例如,八进制转十六进制是八进制-二进制-十六进制。

    推导8421码表

    推8421码表非常简单。

    其实就看某个数是如何通过8421构建的。

    其中,二进制包含0、1,八进制包含0-7、十进制包含0-9,十六进制包含0-F

    对于二进制0和1,其8421码只有两个,分别为0000和0001.

    那么,该如何推导十进制的8421码呢?

    以3为例,我们可以知道3=2+1,此时8421表达式为XX21,即0011.

    对于7呢,我们可以知道7=4+2+1,此时8421表达式为X421,即0111

    对于9呢,我们可以知道9=8+1,此时表达式为8XX1,即1001.

    如何推导十六进制?原理很简单。其实就是将A-F用大于9的数进行表示。

    例如15=F,15=8+4+2+1,则F=1111.

    13=8+4+1=1101=B

    对于八进制,其实它等价于十进制0-7的码表。

    十进制快速转换为二进制

    对于更高的十进制数,例如,97

    我们需要将8421扩展到2的更高次方。

    令97<2^max,Max为正整数

    我们可以得到2^max的最大值为128.

    新的8421码为128,64,32,16,8,4,2,1(共8个数字,8是4的倍数,便于我们进行计算)

    其中128位为0。

    64+32=96,还差1.

    即97=64+32+1=01100001,我们可以去除高位0.

    提示:对于小数部分,我们仍然使用传统的乘二法,它的计算量很小,我们不需要寻求新的解法。

    你可以参考:十进制小数转化为二进制小数 | 菜鸟教程 (runoob.com)

    二进制快速转换为十进制

    例如,对于46,我们按照上述算法将其算成二进制,46=32+8+4+2=00101110

    那么101110如何转化为10进制呢。

    首先101110为6位,我们需要补齐位数到4的倍数,这里需要补到8位,也就是补成00101110.

    很显然,我们按照上面的解法,需要扩展次方,但我们不知道00101110代表多大,不是吗?

    你当然可以按照传统的解法进行解,

    如果你希望使用8421,其实也是一样的,我们需要找到第一个1所在的位置,也就是第三位,即2^5.

    2^5=32

    因此,我们继续列出一个扩展的8421:

    32 16 8 4 2 1

    32位为1,16位为0,8、4、2都为1.

    最后的结果就是32+0+8+4+2=46.它与传统的解法其实是一样 。

    二进制转换为八进制

    假设存在1000101010,求它的八进制。

    注意,八进制转二进制转换的结果数字数量为3的倍数,而不是4的倍数,这是一个特例,二进制转八进制也符合这一条,例题它是10位数,你需要将其补齐到12位。如果你遇到了13位,则应当补齐到15位而非16位。

    即001 000 101 010。

    对码表可得1052Q.

    八进制转二进制

    以1052Q为例。

    当涉及八进制时,我们需要将对应码表的第一位0省略,即通过观察0-7的十进制码表数据与八进制相同,但八进制0-7的首位码均为0,所以我们需要省略它,仅算三位。

    这也就是说,我们在使用421码。

    其中,2=010,5=101,0=000,1=001

    则1052Q=001 000 101 010B

    二进制转换为十六进制

    假设存在一串二进制0100101111010011,求其十六进制。

    将其按四个一组划分,不足补齐。得:

    0100 1011 1101 0011

    照抄码表得4,11,13,3

    即4,B,D,3,得4BD3H

    十六进制转二进制

    假设存在一个十六进制4BD3,求十六进制。

    4=0100

    B=11=1011

    D=13=1101

    3=3=0011

    结果为0100 1011 1101 0011.

    其他进制互相转换

    先转成二进制再进行互转

    易错点:

    八进制没有按照3位划分。

    10进制数没有按照10进制的计算方法进行扩展8421计算。

    更多相关内容
  • 使用8421码将二进制转换为十进制

    千次阅读 2020-03-18 14:24:24
    学习进制转换对学习Java的底层源码有很大的帮助 例如HashMap中用到的的这个方法 public static int highestOneBit(int i) { // HD, Figure 3-1 i |= (i >> 1); i |= (i >> 2); i |= (i >> 4);...

    学习进制转换对学习Java的底层源码有很大的帮助
    例如HashMap中用到的的这个方法

    public static int highestOneBit(int i) {
            // HD, Figure 3-1
            i |= (i >>  1);
            i |= (i >>  2);
            i |= (i >>  4);
            i |= (i >>  8);
            i |= (i >> 16);
            return i - (i >>> 1);
        }
    
    

    如果不懂进制转换,那就无从下手了

    十进制

    首先来看一下最常见的十进制
    十进制只有十个符号 : 0,1,2,3,4,5,6,7,8,9 最大的为 “9”
    当要表达比 “9"大一位时,只能把"9” 变成"0",同时向左前进一位:
    在这里插入图片描述
    当数字很长时,比如824261231,我们通过单位来进行计算:
    在这里插入图片描述

    二进制转换十进制

    复习了一遍十进制,就要学习一个新的概念了,叫做8421码,看图:
    在这里插入图片描述
    使用8421码对低位相乘 再相加,算为:
    18+14+12+11
    最后结果为15

    如果高位有数字,像这样:
    在这里插入图片描述
    低位 0100 算为4,高位每次向左移动一位,翻一倍

    在这里插入图片描述
    0001 1111 对应为
    000256 128 64 32 16
    结果相加
    4+16+32+64+128+256=500
    最后得知 二进制
    0001 1111 0100
    转换为十进制等于
    500

    展开全文
  • 二进制转BCD码(8421

    万次阅读 多人点赞 2018-12-02 15:48:52
    最常用的方法是将二进制转换成BCD码(8421)。  8421码:它只选用了四位二进制码中前10组代码,即用0000~1001分别代表它所对应的十进制数,余下的六组代码不用。  我们将二进制数(1101_0101)转换成十进制数...

           在显示温度、电压、电流等数据时,通常需要将二进制数据转成十进制进行显示。最常用的方法是将二进制码转换成BCD码(8421)。

           8421码:它只选用了四位二进制码中前10组代码,即用0000~1001分别代表它所对应的十进制数,余下的六组代码不用。

           我们将二进制数(1101_0101)转换成十进制数(27+26+24+22+20),对于硬件来说,我们用乘方描述会浪费很多资源。于是,我们迫切寻找一个优化方案。

           当我们将乘方通过二项式定理展开((((((2+1)*2+0)*2+1)*2+0)*2+1)*2+0)*2+1)之后,我们好像去掉了乘方。((((((2+1)*2+0)*2+1)*2+0)*2+1)*2+0)*2+1)=(((((((0+1)2+1)*2+0)*2+1)*2+0)*2+1)*2+0)*2+1)

           我们发现,二项式乘的系数是2。在编程中,乘2可以用移位来代替。通过一系列优化之后发现,二进制数转换成十进制数就只需要移位和加法运算。

    由于BCD码是4个位宽,所以我们在判断时以4个位宽进行判断。将满16进1调整为满10进1。

    二项式

    (BCD)BIN

    (0+1)

    =(1)0001

    ((0+1)2+1)

    =(3)0011

    (((0+1)2+1)*2+0)

    =(6)0110

    ((((0+1)2+1)*2+0)*2+1)

    =()1101

    由于我们要转换成BCD码,不可能出现1101的情况,所以当上一个值大于等于5时,就先要进行加3,再移位。很多人不明白为什么是加3?其实,当上一个值大于等于5时,说明我们移位后的值会大于等于10,所以我们需要向前进一位,而4位二进制是满16才进一位。这时候我们就需要将数值中的10变成16,可以将该数值加6。对上一个值来说,就是加3。

    二项式

    (BCD)BIN

    (0+1)

    =(1)0001

    ((0+1)2+1)

    =(3)0011

    (((0+1)2+1)*2+0)

    =(6)0110

    ((((0+1)2+1)*2+0)*2+1)

    =(13)1_0011

    (((((0+1)2+1)*2+0)*2+1)*2+0)

    =(26)10_0110

    ((((((0+1)2+1)*2+0)*2+1)*2+0)*2+1)

    =(53)101_0011

    (((((((0+1)2+1)*2+0)*2+1)*2+0)*2+1)*2+0)

    =(106)1_0000_0110

    ((((((((0+1)2+1)*2+0)*2+1)*2+0)*2+1)*2+0)*2+1)

    =(213)10_0001_0011

    由于转换是串行执行,二进制数的位宽为多少就有几个时钟周期的延时。例如 :1MHz的时钟周期,二进制数的位宽为1000位,延迟时间为1ms,对于人眼来说,不过一眨眼而已。

    下面是我一起将AD_TCL549数据经过该模块转换后在数码管显示时所使用的代码,有点缺陷,但能使用。具体的代码说明会在写AD_TCL549时描述

    module	BCD (
    	input	wire			clk		,
    	input	wire			rst_n	,
    	input	wire			data_flag,
    	input	wire	[11:0]	din		,
    	
    	output	reg				dout_en,
    	output	reg		[15:0]	dout
    	);
    
    //cnt_12
    	reg	[3:0]	cnt_12;
    parameter	CNT_12_MAX	=	12;
    always@(posedge	clk or negedge	rst_n)
    	if(!rst_n)
    		cnt_12	<=	0;
    	else if(cnt_12==CNT_12_MAX)
    		cnt_12	<=	0;
    	else if(data_flag || cnt_12)
    		cnt_12	<=	cnt_12	+1'b1;
    
    //dout
    always@(posedge	clk or negedge	rst_n)
    	if(!rst_n)
        	dout	=	0;
        else if(data_flag)
        	dout	=	0;
        else if(cnt_12)
            begin
            	if(dout[3:0]>=5)
            		dout[3:0]	= dout[3:0]		+3;
               	if(dout[7:4]>=5)
               		dout[7:4]	= dout[7:4]		+3; 
               	if(dout[11:8]>=5)
               		dout[11:8]	= dout[11:8]	+3;
               	if(dout[15:12]>=5)
               		dout[15:12]	= dout[15:12]	+3;
               	dout	=	{dout[14:0],din[12-cnt_12]};
            end
    
    //dout_en
    always@(posedge	clk or negedge	rst_n)
    	if(!rst_n)
        	dout_en	<=	0;
        else if(cnt_12==CNT_12_MAX)
        	dout_en	<=	1;
        else
        	dout_en	<=	0;
    
    endmodule

     

    展开全文
  • 8421bcd码转换二进制

    千次阅读 2021-07-23 03:24:56
    8421BCD码进制也就是进制位,对于接触过电脑的人来说应该都不陌生,我们常用的进制包括:二进制、八进制、十进制与十六进制,它们之间区别在于数运算时是逢几进一位。最右侧数字是错误类型,2位,16进制,含义仍未知...

    6631793443375976383.jpg

    8421BCD码

    进制也就是进制位,对于接触过电脑的人来说应该都不陌生,我们常用的进制包括:二进制、八进制、十进制与十六进制,它们之间区别在于数运算时是逢几进一位。最右侧数字是错误类型,2位,16进制,含义仍未知。简单点说,虚拟码就是我们经常可以看到的像vk_a,vk_b这样的常数,比如键a的虚拟码是65,写成16进制就是&h41,注意,人们经常用16进制来表示虚拟码。

    二进制

    受计算机物理构造限制以及最大限度优化设计,运算器只能进行2进制加法运算,所以在计算机内部对2进制码还有反码和补码的处理过程。进制也就是进制位,对于接触过电脑的人来说应该都不陌生,我们常用的进制包括:二进制、八进制、十进制与十六进制,它们之间区别在于数运算时是逢几进一位。 商品特征: 内置泵体水流开关设计,全智能微电脑cpo控制,双向无线射频遥控能穿越三堵墙体,遥控距离30米,数码温度显示控温精确,连体水流开关设计,数码面板显示,全智能微电脑数码温度控温,10组时间段定时控制、15分钟时间倒计时功能,9分钟间隙时间启动。

    20世纪被称作第三次科技革命的重要标志之一的计算机的发明与应用,因为数字计算机只能识别和处理由‘0’。‘1’符号串组成的代码。其运算模式正是二进制。19世纪爱尔兰逻辑学家乔治布尔对逻辑命题的思考过程转化为对符号“0‘’。‘’1‘’的某种代数演算8421码和二进制区别,二进制是逢2进位的进位制。0、1是基本算符。因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。

    8421bcd码转换二进制

    用MSI器件设计。 设两位8421BCD码为D7D6D5D4D3D2D1D0转换后的B码为B685B4B3B2B1B0则

    84850d41ddad47f9ffac15ff28eaff4e.png

    上式中加横线部分都可以用一个MSI加法器实现S为加法器的输出S的下标代表模块序号和输出高低位号。

    逻辑图如图5.2.1所示。

    e9e40106f308ca659e9384a6aa8c23b2.png

    e9e8e6636dac0a64bbcd7cbc65faedde.png

    [解法2]

    VHDL设计。

    根据上述解题方法在VHDL程序的结构体设计中可采用结构描述的方法其VHDL主程序如下:

    LIBRARY ieee;

    USE ieee.Std_logic_1164.ALL; USE work.components.ALL;

    ENTITY xiti50 1 IS PORT(d:IN Std_logic_vector(7 downto 0);

    b:OUT Std_logic_vector(6 downto 0));

    END xiti501;

    ARCHITECTURE xiti501_ar OF xitiS01 IS SIGNAL m:Std_logic_vector(3 downto 0);

    6-365-png_6_0_0_135_371_721_527_893.25_1263.375-500-0-542-500.jpg

    SIGNAL n1n2:Std_logic;

    COMPONENT v74x283 PORT(ab:IN std_logic_vector(3 downto 0);

    ci:IN std_logic;

    s:out std_logic_vector(3 downto 0);

    co:OUT std_logic);

    END COMPONENT;

    BEGIN u1:v74x283 PORT MAP(‘0’&d(3 downto 1)d(7 downto 4)‘0’mn1);

    u2:v74x283 PORT MAP(“00”&m(3 downto 2)d(7 downto 4)‘0’b(6 downto 3)n2);

    b(0)《=d(0);

    b(2 downto 1)《=m(1 downto 0);

    24ac1e6b06e52daf790e70bd90ecc11c.png

    END xiti501_ar;

    [解法1]

    用MSI器件设计。

    设两位8421BCD码为D7D6D5D4D3D2D1D0,转换后的B码为B685B4B3B2B1B0,则上式中加横线部分都可以用一个MSI加法器实现,S为加法器的输出,S的下标代表模块序号和输出高低位号。逻辑图如图5.2.1所示。[解法2]VHDL设计。根据上述解题方法,在VHDL程序的结构体设计中8421码和二进制区别,可采用结构描述的方法,其VHDL主程序如下:

    LIBRARYieee;

    USEieee.Std_logic_1164.ALL;

    USEwork.components.ALL;

    ENTITYxiti501ISPORT(d:INStd_logic_vector(7downto0);

    b:OUTStd_logic_vector(6downto0));

    ENDxiti501;

    054c3107d701d65c2a1e8edab47eb06f.png

    ARCHITECTURExiti501_arOFxitiS01ISSIGNALm:Std_logic_vector(3downto0);

    SIGNALn1,n2:Std_logic;

    COMPONENTv74x283PORT(a,b:INstd_logic_vector(3downto0);

    ci:INstd_logic;

    s:outstd_logic_vector(3downto0);

    co:OUTstd_logic);

    ENDCOMPONENT;

    BEGINu1:v74x283PORTMAP(‘0’&d(3downto1),d(7downto4),‘0’,m,n1);

    u2:v74x283PORTMAP(“00”&m(3downto2),d(7downto4),‘0’,b(6downto3),n2);

    b(0)《=d(0);b(2downto1)《=m(1downto0);

    ENDxiti501_ar;

    本文来自电脑杂谈,转载请注明本文网址:

    http://www.pc-fly.com/a/jisuanjixue/article-106698-1.html

    展开全文
  • 二进制转十进制 8421运算法

    千次阅读 2021-12-10 12:33:55
    十进制 二进制 1 0001 2 0010 4 0100 8 1000 16 0001 0000 32 0010 0000 64 0100 0000 ...16 转换二进制 10000 17 转换二进制 17 > 16 < 32 则 17 - 16 = 1 {16, 1} =....
  • 二进制8421

    千次阅读 2021-12-10 20:02:45
    二进制8421
  • 本文大家介绍了二进制或BCD的转换电路。
  • labview 十进制转换为二进制,比较简单的一种方法,还可以用在其他方面
  • 8421法——十六进制和二进制的互相快速转换
  • 二进制转换十进制 算法解析

    千次阅读 2021-03-06 16:26:56
    java里面是有进制间互换现成的方法的:public class十进制与各进制的相互转换 {public static voidmain(String[] args){//java已经实现的机制:十进制转换为二进制int decimal = 10;System.out.println("十进制数:"+...
  • Java将二进制转换为十进制

    千次阅读 2021-04-09 10:25:18
    本文概述我们可以使用Integer.parseInt()方法或自定义逻辑在Java中将二进制转换为十进制。Java二进制到十进制的转换:Integer.parseInt()Integer.parseInt()方法使用给定的redix将字符串转换int。 parseInt()方法...
  • 码制 || BCD码 || 格雷码 || 奇偶校验码 || 字母数字码1 二—十进制码(BCD)你好,我们已经知道,数字系统一般采用二进制进行运算,但人们习惯采用十进制数进行读写,因此需要对十进制数进行二进制编码,从而提供与...
  • 进制数转8421BCD码

    万次阅读 多人点赞 2019-11-26 22:19:00
    十进制数转8421BCD码就是把十进制数字每一位都用4个二进制位所组成的数字代替。 十进制数 8421码 余3码 0 0000 0011 1 0001 0100 2 0010 0101 3 0011 0110 4 0100 0111 5 0101 1000 6 0110 1001...
  • #include <stdio.h> int main(void) { int i,j; int n; int a[32]; scanf("%d",&n); for(i=0;n>0;i++) { a[i]=n%2; n/=2; } for(j=i-1;j>=0;j--) printf("%d",a[j]);...}
  • 二进制转换为十六进制数是Prerequisite: Number systems 先决条件: 数字系统 Converting binary numbers into hexadecimal numbers is similar to the conversion of binary into octal, it just requires some ...
  • 二进制与八进制编码对应表: 二进制 八进制 000 0 001 1 010 2 011 3 100 4 101 5 110 6 111 7 二进制→十六进制:此时分组从右到左每 4 位二进制一组进行转换 例如:转换二进制 0101010100101011010,分组:...
  • 进制转换为十六进制,也就是 采用 除k取余法 ,直接让10处以16,再对 数据如果小于10和大于10进行处理,代码如下: #include<iostream> #include<string> using namespace std; int main() { ...
  • Python十进制转换为二进制

    千次阅读 2021-11-16 23:41:41
    s1 = float(input("Please input a number:")) s2 = int(s1) s3 = s1-s2 x = [] while s2 != 1: m = s2%2 x.append(m) s2 =... 利用while语句,将整数位除取整,小数位乘取整的方法表示出来。 逻辑简单,菜鸟级别。
  • -----------android培训、java培训、java学习型...二进制:0b100 八进制:0100 十进制:100 十六进制:0x100 先从简单的其他进制转十进制开始吧! 十进制转十进制: 100 = 0*10^0 +0*10^1 +1*10^2 0乘以10的0次方 + 0乘以1
  • C语言 十进制转换为二进制

    万次阅读 多人点赞 2021-10-25 12:20:25
    进制转换为二进制代码 十进制转换为二进制: 十进制如何转二进制:将该数字不断除以2直到商零,然后将余数由下至上依次写出,即可得到该数字的二进制表示。 以将数字10转化为二进制为例 当商为零时,将余数由下...
  • 二进制如何转换为十进制?

    千次阅读 2021-06-19 05:54:00
    二进制到十进制数字转换使用加权列来标识数字的顺序以确定数字的最终值将二进制转换为十进制(base-2到base-10) )数字和背面是一个重要的概念,因为二进制编号系统构成了所有计算机和数字系统的基础。十进制或...
  • java中如何将十进制转换为二进制

    千次阅读 2022-03-08 14:27:29
    进制转换为二进制,最重要的是取余,但怎么取余,才能出现正确的二进制 代码如下 public static String BaseSystem_2(int Scanner){ String base=""; int sys=0; while(true){ sys=Scanner%2; Scanner=Scanner/2; ...
  • Java十进制转换为二进制

    千次阅读 2021-02-09 15:42:59
    Java十进制到二进制转换的3种不同方法。 1. Integer.toString()方法 我们可以使用Integer类的toString()方法将十进制数转换二进制数。此方法有两个参数,第一个参数是十进制数,第二个参数是我们要转换的...
  • 二进制转换

    千次阅读 2021-03-04 14:18:51
    数制一、数制的基本概念1、二进制2、十进制3、十六进制4、八进制二、数制的转换1、二、十进制的转换2、十、十六、二进制转换 一、数制的基本概念 1、二进制 计算机中的数是用二进制数表示的,用后缀B表示。特点是...
  • 16进制转换8421BCD编码函数

    千次阅读 2021-05-22 14:30:23
    十六进制十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常生活中的表示法...1、BCD码与十进制数的转换BCD码与十进制数的转换关系很直观,相互转换也很简单,将十进制数75.4转换为BCD码:...
  • 例:10进制10转换二进制 首先按照8421来分解:10=2+8,用8421转换法,对应数字下面写1,没有的写0,得到: 8421 1010 也就是说10进制的转换成2进制等于1010,此时或许有人会问,如果这个数大于15(8+4+2+1)咋办...
  • 进制8421_BCD码

    万次阅读 2021-07-04 10:32:45
    BCD码(Binary-Coded Decimal‎),用4位二进制数来表示1位十进制数中的0~9这10个数码,是一种二进制的数字编码形式,常应用于计算机内部十进制与二进制之间的转换。 BCD码可分为有权码和无权码两类。其中,常见...
  • JavaScript十进制转换为二进制

    千次阅读 2021-05-11 07:25:12
    示例1:将十进制转换为二进制 // program to convert decimal to binary function convertToBinary(x) { let bin = 0; let rem, i = 1, step = 1; while (x != 0) { rem = x % 2; console.log( `Step ${...
  • 进制转换为二进制(java)

    千次阅读 2021-05-31 22:46:58
    ##方法一: 主要通过辗转相除法实现,既 不断除求余数的过程,但是需要注意正负数。 public class Number2Binary { public static void main(String[] args) { Scanner input = new Scanner(System.in); while ...
  • C++:十进制转换为二进制

    千次阅读 2021-11-01 22:35:55
    #include <...int numberbin(int x)//定义函数,求一个整数对应的二进制数的位数 { int n=0; do { x/=2; n++; } while (x); return n; } int main() { int x=0,bin=0,n,y=0; cin>&

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 809,800
精华内容 323,920
关键字:

二进制转换为8421