开发者社区> 问答> 正文

二进制怎么算

二进制是什么.怎么算..大家最好告诉我通俗易懂的..谢谢.

展开
收起
知与谁同 2018-07-17 17:02:50 6714 0
5 条回答
写回答
取消 提交回答
  • 二进制是由0和1组成的。一般都是除2取余数,一直除到零为止。
    2019-07-17 22:57:26
    赞同 展开评论 打赏
  • 12535
    18世纪德国数理哲学大师莱布尼兹从他的传教士朋友鲍威特寄给他的拉丁文译本《易经》中,读到了八卦的组成结构,惊奇地发现其基本素数(0)(1),即《易经》的阴爻- -和__阳爻,其进位制就是二进制,并认为这是世界上数学进制中最先进的。
    20世纪被称作第三次科技革命的重要标志之一的计算机的发明与应用,其运算模式正是二进制。它不但证明了莱布尼兹的原理是正确的,同时也证明了《易经》数理学是很了不起的。
    [编辑本段]进制数
    1、二进制数据的表示法
    二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。二进制数据也是采用位置计数法,其位权是以2为底的幂。例如二进制数据110.11,其权的大小顺序为2^2、2^1、2^0、2^-1、2^-2。对于有n位整数,m位小数的二进制数据用加权系数展开式表示,可写为:
    (a(n-1)a(n-2)…a(-m))2=a(n-1)×2^(n-1)+a(n-2)×2^(n-2)+……+a(1)×2^1+a(0)×2^0+a(-1)×2^(-1)+a(-2)×2^(-2)+……+a(-m)×2^(-m)
    二进制数据一般可写为:(a(n-1)a(n-2)…a(1)a(0).a(-1)a(-2)…a(-m))2。
    注意:
    1.式中aj表示第j位的系数,它为0和1中的某一个数。
    2.a(n-1)中的(n-1)为下标,输入法无法打出所以用括号括住,避免混淆。
    3.2^2表示2的平方,以此类推。
    【例1102】将二进制数据111.01写成加权系数的形式。
    解:(111.01)2=(1×2^2)+(1×2^1)+(1×2^0)+(0×2^-1)+(1×2^-2)
    [编辑本段]二进制运算
    二进制数据的算术运算的基本规律和十进制数的运算十分相似。最常用的是加法运算和乘法运算。
    1. 二进制加法
    有四种情况: 0+0=0
    0+1=1
    1+0=1
    1+1=10 进位为1
    【例1103】求 (1101)2+(1011)2 的和
    解:
    ??1 1 0 1
    + ?1 0 1 1
    -------------------
    ?1 1 0 0 0
    2. 二进制乘法
    有四种情况: 0×0=0
    1×0=0
    0×1=0
    1×1=1
    【例1104】求 (1110)2 乘(101)2 之积
    解:
    ???1 1 1 0
    × ?? 1 0 1
    -----------------------
    ??? 1 1 1 0
    ?? 0 0 0 0
    ?1 1 1 0
    -------------------------
    1 0 0 0 1 1 0
    (这些计算就跟十进制的加或者乘法相同,只是进位的数不一样而已,十进制的是到十才进位这里是到2就进了)
    [编辑本段]莱布尼茨的二进制
    在德国图灵根著名的郭塔王宫图书馆(Schlossbiliothke zu Gotha)保存着一份弥足珍贵的手稿,其标题为:
    “1与0,一切数字的神奇渊源。这是造物的秘密美妙的典范,因为,一切无非都来自上帝。”
    这是德国天才大师莱布尼茨(Gottfried Wilhelm Leibniz,1646 - 1716)的手迹。但是,关于这个神奇美妙的数字系统,莱布尼茨只有几页异常精炼的描述。用现代人熟悉的话,我们可以对二进制作如下的解释:
    2^0 = 1
    2^1 = 2
    2^2 = 4
    2^3 = 8
    2^4 = 16
    2^5 = 32
    2^6 = 64
    2^7 = 128
    以此类推。
    把等号右边的数字相加,就可以获得任意一个自然数。我们只需要说明:采用了2的几次方,而舍掉了2几次方。二进制的表述序列都从右边开始,第一位是2的0次方,第二位是2的1次方,第三位时2的2次方……,以此类推。一切采用2的成方的位置,我们就用“1”来标志,一切舍掉2的成方的位置,我们就用“0”来标志。这样,我们就得到了下边这个序列:
    1 1 1 0 0 1 0 1
    2的7次方
    2的6次方
    2的5次方
    0
    0
    2的2次方
    0
    2的0次方
    128
    +
    64
    +
    32
    +
    0
    +
    0
    +
    4
    +
    0
    +
    1
    =
    229
    在这个例子中,十进制的数字“229”就可以表述为二进制的“11100101”。任何一个二进制数字最左边的一位都是“1”。通过这个方法,用1到9和0这十个数字表述的整个自然数列都可用0和1两个数字来代替。0与1这两个数字很容易被电子化:有电流就是1;没有电流就是0。这就整个现代计算机技术的根本秘密所在。
    2019-07-17 22:57:26
    赞同 展开评论 打赏
  • package mimaxue;

    public class StrBinaryTurn {
    //将Unicode字符串转换成bool型数组
    public boolean[] StrToBool(String input){
    boolean[] output=Binstr16ToBool(BinstrToBinstr16(StrToBinstr(input)));
    return output;
    }
    //将bool型数组转换成Unicode字符串
    public String BoolToStr(boolean[] input){
    String output=BinstrToStr(Binstr16ToBinstr(BoolToBinstr16(input)));
    return output;
    }
    //将字符串转换成二进制字符串,以空格相隔
    private String StrToBinstr(String str) {
    char[] strChar=str.toCharArray();
    String result="";
    for(int i=0;i<strChar.length;i++){
    result +=Integer.toBinaryString(strChar[i])+ " ";
    }
    return result;
    }
    //将二进制字符串转换成Unicode字符串
    private String BinstrToStr(String binStr) {
    String[] tempStr=StrToStrArray(binStr);
    char[] tempChar=new char[tempStr.length];
    for(int i=0;i<tempStr.length;i++) {
    tempChar[i]=BinstrToChar(tempStr[i]);
    }
    return String.valueOf(tempChar);
    }
    //将二进制字符串格式化成全16位带空格的Binstr
    private String BinstrToBinstr16(String input){
    StringBuffer output=new StringBuffer();
    String[] tempStr=StrToStrArray(input);
    for(int i=0;i<tempStr.length;i++){
    for(int j=16-tempStr[i].length();j>0;j--)
    output.append('0');
    output.append(tempStr[i]+" ");
    }
    return output.toString();
    }
    //将全16位带空格的Binstr转化成去0前缀的带空格Binstr
    private String Binstr16ToBinstr(String input){
    StringBuffer output=new StringBuffer();
    String[] tempStr=StrToStrArray(input);
    for(int i=0;i<tempStr.length;i++){
    for(int j=0;j<16;j++){
    if(tempStr[i].charAt(j)=='1'){
    output.append(tempStr[i].substring(j)+" ");
    break;
    }
    if(j==15&&tempStr[i].charAt(j)=='0')
    output.append("0"+" ");
    }
    }
    return output.toString();
    }
    //二进制字串转化为boolean型数组 输入16位有空格的Binstr
    private boolean[] Binstr16ToBool(String input){
    String[] tempStr=StrToStrArray(input);
    boolean[] output=new boolean[tempStr.length*16];
    for(int i=0,j=0;i<input.length();i++,j++)
    if(input.charAt(i)=='1')
    output[j]=true;
    else if(input.charAt(i)=='0')
    output[j]=false;
    else
    j--;
    return output;
    }
    //boolean型数组转化为二进制字串 返回带0前缀16位有空格的Binstr
    private String BoolToBinstr16(boolean[] input){
    StringBuffer output=new StringBuffer();
    for(int i=0;i<input.length;i++){
    if(input[i])
    output.append('1');
    else
    output.append('0');
    if((i+1)%16==0)
    output.append(' ');
    }
    output.append(' ');
    return output.toString();
    }
    //将二进制字符串转换为char
    private char BinstrToChar(String binStr){
    int[] temp=BinstrToIntArray(binStr);
    int sum=0;
    for(int i=0; i<temp.length;i++){
    sum +=temp[temp.length-1-i]<<i;
    }
    return (char)sum;
    }
    //将初始二进制字符串转换成字符串数组,以空格相隔
    private String[] StrToStrArray(String str) {
    return str.split(" ");
    }
    //将二进制字符串转换成int数组
    private int[] BinstrToIntArray(String binStr) {
    char[] temp=binStr.toCharArray();
    int[] result=new int[temp.length];
    for(int i=0;i<temp.length;i++) {
    result[i]=temp[i]-48;
    }
    return result;
    }

    }
    2019-07-17 22:57:25
    赞同 展开评论 打赏
  • 这个时候,玄酱是不是应该说点什么...
    二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统。
    2019-07-17 22:57:25
    赞同 展开评论 打赏
  • 运行calc打开计算器,点击“查看”-“科学型”,输入十进制数,再点击“二进制”。
    以上是最通俗的方法,后面的方法就要动脑了,请先做好心理准备。

    十进制转二进制:
    将十进制数除以2,记录余数1(整除则记0),然后结果继续除以2,直到最后1/2=0余1为止,然后把所有记录下的数倒过来排列,就是二进制结果。
    比如39,反复除以2的余数依次是111001,则二进制数的39就是100111。多试几次就熟练了。
    当然这是最笨的方法。实际使用中不会真的这样算。比较实用的方法是寻找2的倍数的“最近值”。比如39,39 = 32+7 = 32+4+3 = 32+4+2+1。
    那么:32是2的5次方,二进制就是后面有5个0,即:100000。以此类推,4(100),2(10),1(1),所以加起来就是100111。
    这个方法需要事先熟悉2的各次方(幂)对应的十进制数。2的0~10次幂依次为:1,2,4,8,16,32,64,128,256,512,1024
    2019-07-17 22:57:25
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载