BCD码和二进制码有啥区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BCD码和二进制码有啥区别相关的知识,希望对你有一定的参考价值。

区别:BCD码(Binary-Coded Decimal‎)亦称二进码十进数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码。二进制(binary)数是指用二进制记数系统,即以2为基数的记数系统表示的数字。这一系统中,数通常用两个不同的符号0(代表零)和1(代表一)来表示。

拓展资料:

BCD码可分为有权码和无权码两类:有权BCD码有8421码、2421码、5421码,其中8421码是最常用的。无权BCD码有余3码,余3循环码等。

现代的二进制记数系统由戈特弗里德·莱布尼茨于1679年设计,在他1703年发表的文章《论只使用符号0和1的二进制算术,兼论其用途及它赋予伏羲所使用的古老图形的意义》。

参考技术A   二进制是由1和0两个数字组成的,它可以表示两种状态,即开和关。所有输入电脑的任何信息最终都要转化为二进制。目前通用的是ASCII码。最基本的单位为bit。
  BCD码(Binary-Coded Decimal‎)亦称二进码十进数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码。是一种二进制的数字编码形式,用二进制编码的十进制代码。BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。这种编码技巧最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准确的计算。相对于一般的浮点式记数法,采用BCD码,既可保存数值的精确度,又可免去使电脑作浮点运算时所耗费的时间。此外,对于其他需要高精确度的计算,BCD编码亦很常用。
  BCD码与十进制数的转换关系很直观,相互转换也很简单,将十进制数75.4转换为BCD码:7->0111,5->0101,4->0100所以拼成8421BCD码的结果是:(0111 0101.0100)BCD;若将BCD码1000 0101.0101转换为十进制数:1000->8,0101->5,0101->5所以结果是:(85.5)D。
  同一个8位二进制代码表示的数,当认为它表示的是二进制数和认为它表示的是二进制编码的十进制数时,数值是不相同的。 例如:00011000,当把它视为二进制数时,其值为24;但作为2位BCD码时, 其值为18。 又例如00011100,如将其视为二进制数,其值为28,但不能当成BCD码,因为在8421BCD码中,它是个非法编码 。
参考技术B

两者的区别为:

1、当用来表示十进制数字0——9时,用二进制代码与8421BCD代码完全相同。而当表示的十进制数字大于9时,用二进制代码与8421BCD代码表达就完全不同了。

2、用二进制表示就是二进制数字安权重 求和,其值为十进制数字;用8421BCD代码则是每一位十进制数字都用4位8421BCD代码表示。如十进制数字15,转化为二进制为1111;用8421BCD码表示为0001 0101。

拓展资料

二进制编码的优点:


(1)技术实现简单,计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用“1”和“0”表示。


(2)简化运算规则:两个二进制数和、积运算组合各有三种,运算规则简单,有利于简化计算机内部结构,提高运算速度。


(3)适合逻辑运算:逻辑代数是逻辑运算的理论依据,二进制只有两个数码,正好与逻辑代数中的“真”和“假”相吻合。


(4)易于进行转换,二进制与十进制数易于互相转换。


(5)用二进制表示数据具有抗干扰能力强,可靠性高等优点。因为每位数据只有高低两个状态,当受到一定程度的干扰时,仍能可靠地分辨出它是高还是低。

参考技术C

四个二进制码组成一个BCD码。

二进制是由1和0两个数字组成的,它可以表示两种状态,即开和关。所有输入电脑的任何信息最终都要转化为二进制。目前通用的是ASCII码。最基本的单位为bit。

BCD码(Binary-Coded Decimal‎)亦称二进码十进数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码。是一种二进制的数字编码形式,用二进制编码的十进制代码。BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。

这种编码技巧最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准确的计算。相对于一般的浮点式记数法,采用BCD码,既可保存数值的精确度,又可免去使电脑作浮点运算时所耗费的时间。此外,对于其他需要高精确度的计算,BCD编码亦很常用。

拓展资料:

定义:用4位二进制数来表示1位十进制数中的0~9这10个数码,简称BCD码。

即BCD代码。Binary-Coded Decimal‎,简称BCD,称BCD码或二-十进制代码,亦称二进码十进数。是一种二进制的数字编码形式,用二进制编码的十进制代码。这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。

这种编码技巧,最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准确的计算。相对于一般的浮点式记数法,采用BCD码,既可保存数值的精确度,又可免却使电脑作浮点运算时所耗费的时间。此外,对于其他需要高精确度的计算,BCD编码亦很常用。

由于十进制数共有0、1、2、……、9十个数码,因此,至少需要4位二进制码来表示1位十进制数。4位二进制码共有2^4=16种码组,在这16种代码中,可以任选10种来表示10个十进制数码,共有N=16!/(16-10)!约等于2.9乘以10的10次方种方案。常用的BCD代码列于末。

参考技术D BCD码(Binary-Coded Decimal‎)亦称二进码十进数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码。是一种二进制的数字编码形式,用二进制编码的十进制代码。BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。这种编码技巧最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准确的计算。相对于一般的浮点式记数法,采用BCD码,既可保存数值的精确度,又可免却使电脑作浮点运算时所耗费的时间。此外,对于其他需要高精确度的计算,BCD编码亦很常用。

我的电子邮件验证码有啥问题?

【中文标题】我的电子邮件验证码有啥问题?【英文标题】:What's wrong with my email verification code?我的电子邮件验证码有什么问题? 【发布时间】:2013-07-31 03:00:41 【问题描述】:

好的,今天,我编辑了这段代码,它应该是为了让用户可以更改他们的电子邮件地址。在他们更改电子邮件地址后,它将向用户发送一封确认电子邮件。但是,相反,我被重定向到内部错误 500 页面。 :\ 有什么帮助吗?我看不出代码有什么问题..

<?php

include("session.php");
//Create game account
$mysqli = new mysqli("localhost", "root", "password", "data");

if(mysqli_connect_errno())
    echo("Sorry, the server is 'Under Maintainance'");
    exit();


$newemail = $mysqli->real_escape_string($_POST['email']);
$newemail = strtolower($newemail);
$password = $mysqli->real_escape_string($_POST['password']);
$hash     = sha1(strtolower($name) . $password);

if(!isset($name))
    header("Location:index");
else if($password == null || $password == "" || (strlen($password)) < 4 || strpos($password, '<') !== false || strpos($password, '>') !== false)
    header("Location:cemail?error=6");//Invalid password
else if($newemail == null || $newemail == "" || (strlen($newemail) <= 6 || strpos($newemail, '<') !== false || strpos($newemail, '>') !== false) || strpos($newemail, '@') == false || strpos($newemail, ".com") == false)
    header("Location:cemail?error=7");//Invalid Email address
else if($email == $newemail)
    header("Location:cemail?error=7");//Invalid Email address
else
    $result  = $mysqli->query("SELECT * FROM characters WHERE email='$newemail' && name!='$name");
    $row_cnt = $result->num_rows;
    $result->free();

    if($row_cnt != 0)
        header("Location:cemail?error=3");//Email already taken
    else

        $result  = $mysqli->query("SELECT * FROM characters WHERE originemail='$newemail' && name!='$name'");
        $row_cnt = $result->num_rows;
        $result->free();

        if($row_cnt != 0)
            header("Location:cemail?error=3");//Email already taken
        else

            $result = $mysqli->query("SELECT * FROM characters WHERE name='$name'");

            /* fetch associative array */
            while($row = $result->fetch_assoc())
                $pass        = $row['pass'];
                $originemail = $row['originemail'];
            

            /* free result set */
            $result->free();

            if($hash != $pass)
                header("Location:cemail?error=6");//Invalid Password Match
            else
                $mysqli->query("UPDATE characters SET email='$newemail' WHERE name='$name'");

//Send Email to confirm 
                $to      = $newemail . ", " . $originemail;
                $subject = "Your email address has now been successfully changed!";
                $body    = "This is a notification regarding the recent change(s) made to your Legion Online account: " . $username . "
\n\n
Your email address has recently been modified through the Legion Online website. If you made this email address change, please disregard this notification. If you did not change your email address, please visit the account recovery page to ensure your account is secure.\n\nEmail addresses connected to this account: \n" . $originemail . "(primary)\n" . $newemail;
                $headers = "From: AccountSupport@ArchStudios.net" . "\r\n";
                if(mail($to, $subject, $body, $headers))
                    header("Location:accountsettings");
                else
                    echo "Email request failed.";
                
            
        
    

$mysqli->close();
?>

【问题讨论】:

查看错误日志,看看错误是什么。 或者如果您找不到错误日志,请将ini_set('display_errors', 1); 临时添加到文件顶部(&lt;?php 正下方)。请务必在之后将其删除。 请注意,您编辑的密码仍在编辑历史记录中。 您在使用$name 之前没有声明它 - $hash = sha1(strtolower($name) . $password); 我强烈建议您在任何使用它的地方更改密码。 【参考方案1】:

变量 $name 只有一个单引号:

$result=$mysqli->query("SELECT * FROM characters WHERE email='$newemail' && name!='$name");

复制这个:

$result=$mysqli->query("SELECT * FROM characters WHERE email='$newemail' && name!='$name'");

【讨论】:

【参考方案2】:

不要忘记关闭单引号/双引号。

替换

$mysqli = new mysqli("localhost", "root", "password", "data);
$result  = $mysqli->query("SELECT * FROM characters WHERE email='$newemail' && name!='$name");

通过

$mysqli = new mysqli("localhost", "root", "password", "data");
$result  = $mysqli->query("SELECT * FROM characters WHERE email='$newemail' && name!='$name'");

【讨论】:

感谢语法高亮 请注意,“数据”后面缺少的引号只是匿名代码时的错误,而不是他遇到的实际问题。

以上是关于BCD码和二进制码有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

请教BIN、BCD、二进制、ACSII码有啥区别,多谢

ASCLL码和BCD码区别是啥

SDL 物理键码和 SDL 虚拟键码有啥区别?

8421BCD码怎样转换成十进制

ascii码与二进制码有何区别?

8421BCD码和十进制数互相转换 (100101111000)8421BCD (19.7)10