精华内容
下载资源
问答
  • matlab实现十进制二进制定点有符号补码小数的转换,其中定点小数的整数部分位长和小数部分位长可以自己指定,输出的最高位表示符号位(0为整数,1为负数),补码表示
  • 十进制转换为其他的进制同理 2进制转换为8进制之类的转换可以借助十进制完成,即先转换为10进制,然后将10进制转换为8进制 可参考 2. 出现的问题 本来想借助函数f2实现将a转换为b进制的数,由于...

    1. 基础知识

    1. 十进制转二进制
      方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除依此步骤继续向下运算直到商为0为止。
      在这里插入图片描述
    2. 十进制转换为其他的进制同理
    3. 2进制转换为8进制之类的转换可以借助十进制完成,即先转换为10进制,然后将10进制转换为8进制
      可参考

    2. 出现的问题

    1. 本来想借助函数f2实现将a转换为b进制的数,由于大于10的进制含有A代表10,B代表11,C代表12,D代表13,E代表14,F代表15,所以想着把数组f定义为字符串数组࿰
    展开全文
  • 编写递归函数void DtoB,实现十进制无符号整数二进制数的转换。递归提示:例如,如果要输出13的二进制数1101,可以考虑先递归输出13的前面的三个二进制数110,最后再输出结尾的1。 样例输入:13 样例输出:1101 #...

    编写递归函数void DtoB,实现十进制无符号整数到二进制数的转换。递归提示:例如,如果要输出13的二进制数1101,可以考虑先递归输出13的前面的三个二进制数110,最后再输出结尾的1。
    样例输入:13
    样例输出:1101

    #include <iostream> 
    using namespace std;
    void DtoB(unsigned long num) 
    {
        if(num/2)
        {
            DtoB(num/2);
        } 
        cout<<num%2;
    }   
    int main ( )
    { 
        long a;
        cin>>a;
        DtoB(a);
        return 0;
    }
    展开全文
  • (左移、右移、无符号右移)的时候发现十进制数转二进制数的时候,负数的位数是够的,比如:负整数 -15 的二进制表示是:11111111111111111111111111110001,但是 正整数 15 的二进制表示是:1111,抱着好奇心,我...

    前言:在 分析轮子(二)- << ,>>,>> (左移、右移、无符号右移)的时候发现十进制数转二进制数的时候,负数的位数是够的,比如:负整数 -15 的二进制表示是:11111111111111111111111111110001 ,但是 正整数 15 的二进制表示是:1111,抱着好奇心,我看了一下源码,现分析如下。

    注:玩的是JDK1.7版

    一:请先看一下如下资料,他们解释了计算机中为什么使用二进制表示数据?计算机中正数、零、负数是如何表示的以及为什么?

    1):关于2的补码 (阮大神的佳作,通俗易懂)

    2):[java]负数的二进制编码——越是基础的越是要掌握(这篇也很好,讲解的比较系统)

    3):你真的了解Java中的负数

    4):计算机中二进制数据的编码方式,整理了两篇他人的博客

     

    二:整数的十转二(转八、转十六的底层也是一样),源码如下

       /**
         * Returns a string representation of the integer argument as an
         * unsigned integer in base&nbsp;2.
         *
         * <p>The unsigned integer value is the argument plus 2<sup>32</sup>
         * if the argument is negative; otherwise it is equal to the
         * argument.  This value is converted to a string of ASCII digits
         * in binary (base&nbsp;2) with no extra leading {@code 0}s.
         * If the unsigned magnitude is zero, it is represented by a
         * single zero character {@code '0'}
         * (<code>'&#92;u0030'</code>); otherwise, the first character of
         * the representation of the unsigned magnitude will not be the
         * zero character. The characters {@code '0'}
         * (<code>'&#92;u0030'</code>) and {@code '1'}
         * (<code>'&#92;u0031'</code>) are used as binary digits.
         *
         * @param   i   an integer to be converted to a string.
         * @return  the string representation of the unsigned integer value
         *          represented by the argument in binary (base&nbsp;2).
         * @since   JDK1.0.2
         */
        public static String toBinaryString(int i) {
            return toUnsignedString(i, 1);
        }
    
        /**
         * Convert the integer to an unsigned number.
         */
        private static String toUnsignedString(int i, int shift) {
            char[] buf = new char[32];
            int charPos = 32;
            int radix = 1 << shift;
            int mask = radix - 1;
            do {
                buf[--charPos] = digits[i & mask];
                i >>>= shift;
            } while (i != 0);
    
            return new String(buf, charPos, (32 - charPos));
        }

    很明显,上述代码的核心是 toUnsignedString 方法的do-while循环,从低到高一位一位的确认转成的二进制数是0还是1,当待转换的整数经过无符号右移为0时,则停止循环。

     

    三:改造后的源码,可通过日志信息更为直观的看到进制转换的每一步

    /*
     * @description:进制转换测试类
     * @author:godtrue
     * @create:2018-09-08
     */
    public class NumConvert {
    
        /**
        *
        *@description: 测试的入口方法
        *@param args
        *@return: void
        *@author: godtrue
        *@createTime: 2018-09-08
        *@version: v1.0
        */
        public static void main(String[] args) {
            System.out.println("整数 15 的二进制表示是:"+toBinaryString(15));
            //System.out.println("整数 -1 的二进制表示是:"+toBinaryString(-1));
            //System.out.println("整数  0 的二进制表示是:"+toBinaryString(0));
            //System.out.println("整数  1 的二进制表示是:"+toBinaryString(1));
        }
    
        /***
        *
        *@description: Returns a string representation of the integer argument as an unsigned integer in base&nbsp;2.
        *@param i 待转换十进制整数
        *@return: java.lang.String
        *@author: godtrue
        *@createTime: 2018-09-08
        *@version: v1.0
        */
        public static String toBinaryString(int i) {
            return toUnsignedStringPrintLog(i, 1);
        }
    
        /**
        *
        *@description: Convert the integer to an unsigned number,print log.
        *@param i 待转换十进制整数
        *@param shift 移位的位数,转换进制时使用,用于获取转换进制的基数
        *@return: java.lang.String
        *@author: godtrue
        *@createTime: 2018-09-08
        *@version: v1.0
        */
        private static String toUnsignedStringPrintLog(int i, int shift) {
            char[] buf = new char[32];
            for(int l=0; l<32; l++){
                buf[l]='0';
            }
            int charPos = 32;
            int radix = 1 << shift;
            int mask = radix - 1;
            int loop = 1;
            do {
                buf[--charPos] = digits[i & mask];
    
                StringBuilder logInfoMAndNum = new StringBuilder("[ 二进制 与 操作]\n")
                        .append("[").append("\n")
                        .append("     ").append(toUnsignedStringNoLog(i,1)).append(" 十进制是:").append(i).append("\n")
                        .append("   & ").append(toUnsignedStringNoLog(mask,1)).append(" 十进制是:").append(mask).append("\n")
                        .append("   = ").append(toUnsignedStringNoLog((i & mask),1)).append(" 十进制是:").append((i & mask)).append("\n")
                        .append("]");
                System.out.println(logInfoMAndNum);
    
                StringBuilder logInfoLoopCount = new StringBuilder("[ 第 ")
                        .append(loop).append(" 次循环,转换的二进制数据表示为:").append(new String(buf)).append(" 计算出来的第 ").append(loop++).append(" 位,是:").append((i & mask))
                        .append("]");
                System.out.println(logInfoLoopCount);
    
                StringBuilder logInfoConvertNum = new StringBuilder("[ 将")
                        .append(" ] [ ").append(i)
                        .append(" ] [ ").append("无符号右移 1 位,结果如右所示")
                        .append(" ] [ ").append(toUnsignedStringNoLog(i,1)).append("(十进制是:").append(i).append(")").append(" >>> ").append(shift).append(" = ").append(toUnsignedStringNoLog((i >>> shift),1)).append("(十进制是:").append((i >>> shift)).append(")")
                        .append(" ]\n\n\n");
                System.out.println(logInfoConvertNum);
    
                i >>>= shift;
    
            } while (i != 0);
    
            return new String(buf);
        }
    
        /**
        *
        *@description: Convert the integer to an unsigned number,not print log.
        *@param i 
        *@param shift
        *@return: java.lang.String
        *@author: godtrue
        *@createTime: 2018-09-08
        *@version: v1.0
        */
        private static String toUnsignedStringNoLog(int i, int shift) {
            char[] buf = new char[32];
            for(int l=0; l<32; l++){
                buf[l]='0';
            }
            int charPos = 32;
            int radix = 1 << shift;
            int mask = radix - 1;
            do {
                buf[--charPos] = digits[i & mask];
                i >>>= shift;
            } while (i != 0);
    
            return new String(buf);
        }
    
        /**
        *
        *@description: All possible chars for representing a number as a String
        *@param null
        *@return:
        *@author: godtrue
        *@createTime: 2018-09-08
        *@version: v1.0
        */
        final static char[] digits = {
                '0' , '1' , '2' , '3' , '4' , '5' ,
                '6' , '7' , '8' , '9' , 'a' , 'b' ,
                'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
                'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,
                'o' , 'p' , 'q' , 'r' , 's' , 't' ,
                'u' , 'v' , 'w' , 'x' , 'y' , 'z'
        };
    }
    [ 二进制 与 操作]
    [
         00000000000000000000000000001111 十进制是:15
       & 00000000000000000000000000000001 十进制是:1
       = 00000000000000000000000000000001 十进制是:1
    ]
    [ 第 1 次循环,转换的二进制数据表示为:00000000000000000000000000000001 计算出来的第 1 位,是:1]
    [ 将 ] [ 15 ] [ 无符号右移 1 位,结果如右所示 ] [ 00000000000000000000000000001111(十进制是:15) >>> 1 = 00000000000000000000000000000111(十进制是:7) ]
    
    
    
    [ 二进制 与 操作]
    [
         00000000000000000000000000000111 十进制是:7
       & 00000000000000000000000000000001 十进制是:1
       = 00000000000000000000000000000001 十进制是:1
    ]
    [ 第 2 次循环,转换的二进制数据表示为:00000000000000000000000000000011 计算出来的第 2 位,是:1]
    [ 将 ] [ 7 ] [ 无符号右移 1 位,结果如右所示 ] [ 00000000000000000000000000000111(十进制是:7) >>> 1 = 00000000000000000000000000000011(十进制是:3) ]
    
    
    
    [ 二进制 与 操作]
    [
         00000000000000000000000000000011 十进制是:3
       & 00000000000000000000000000000001 十进制是:1
       = 00000000000000000000000000000001 十进制是:1
    ]
    [ 第 3 次循环,转换的二进制数据表示为:00000000000000000000000000000111 计算出来的第 3 位,是:1]
    [ 将 ] [ 3 ] [ 无符号右移 1 位,结果如右所示 ] [ 00000000000000000000000000000011(十进制是:3) >>> 1 = 00000000000000000000000000000001(十进制是:1) ]
    
    
    
    [ 二进制 与 操作]
    [
         00000000000000000000000000000001 十进制是:1
       & 00000000000000000000000000000001 十进制是:1
       = 00000000000000000000000000000001 十进制是:1
    ]
    [ 第 4 次循环,转换的二进制数据表示为:00000000000000000000000000001111 计算出来的第 4 位,是:1]
    [ 将 ] [ 1 ] [ 无符号右移 1 位,结果如右所示 ] [ 00000000000000000000000000000001(十进制是:1) >>> 1 = 00000000000000000000000000000000(十进制是:0) ]
    
    
    
    整数 15 的二进制表示是:00000000000000000000000000001111
    
    Process finished with exit code 0

     仔细看上述代码及日志信息,可比较清楚的看到JDK是怎么将十进制的数据转换为对应的二进制数据的,核心还是通过 toUnsignedString 方法的 do-while 循环,从低到高一位一位的确认转成的二进制数是0还是1,当待转换的整数经过无符号右移为0时,则停止循环,因为再继续循环通过0和其他数据相与时总是为0的。可以调整上述测试代码类中的测试参数,查看相应的数据转换情况。

    十进制数据 转换为 二进制数据 的逻辑是:将十进制的数据除以二,首先取余数作为二进制的第一位(从右到左,由低到高,左低右高),然后再用得到的商再除于二,再取余数作为二进制的第二位,以此类推,直到除不尽为止即商为0,比如:15转换为二进制数据

    15/2=7 余数为1

    7/2=3 余数为1

    3/2=1 余数为1

    1/2=0 余数为1

    则对应的二进制数为 1111,如果是32位的整数,则将其余的位数补0 ,则15(十进制形式)= 0000 0000 0000 0000 0000 0000 0000 1111(二进制形式)

     

    如果是 -15,转换为二进制,其步骤入下:

    第一步:取负数的绝对值 |-15| = 15

    第二步:将15转换为二进制,15(十进制形式)= 0000 0000 0000 0000 0000 0000 0000 1111(二进制形式)

    第三步:取反 0000 0000 0000 0000 0000 0000 0000 1111(二进制形式)= 1111 1111 1111 1111 1111 1111 1111 0000(二进制形式)

    第四步:加一 1111 1111 1111 1111 1111 1111 1111 0000 +1 = 1111 1111 1111 1111 1111 1111 1111 0001 ,所以,-15 = 1111 1111 1111 1111 1111 1111 1111 0001

    负数 通过 无符号右移一位 之后,会变成比较大的一个正整数,这个正整数往往需要经过32次无符号右移一位,才能变成0,这也是上述代码计算的一个思路,上面的代码比较简单,不妨自己动手玩玩吧!

     

    转载于:https://www.cnblogs.com/godtrue/p/9596446.html

    展开全文
  • 十进制转换成无符号二进制数:(无符号二进制整数无法表示负十进制数)。1、整数部分:采用"除2取余,逆序排列"法。用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为...

    270d0696a9a94c490cfbba4b0c3f40d2.png

    十进制转换成无符号二进制数:

    (无符号二进制整数无法表示负十进制数)。

    1、整数部分:

    采用"除2取余,逆序排列"法。用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为小于1时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

    例:255=(11111111)B

    255/2=127余1

    127/2=63余1

    63/2=31余1

    31/2=15余1

    15/2=7余1

    7/2=3余1

    3/2=1余1

    1/2=0余1

    逆序排序为11111111。

    2、小数部分:

    采用"乘2取整"法,即将小数部分乘以2,然后取整数部分,剩下的小数部分继续乘以2,然后取整数部分,剩下的小数部分又乘以2,一直取到小数部分为零为止。

    例:将0.125换算为二进制,结果为:将0.125换算为二进制(0.001)2 。0.125*2=0.25

    0.25*2=0.5

    0.5*2=1.0

    各位取整得0.125=(0.001)2

    有符号数与无符号数:

    有符号数:最高位表示符号,不代表数字。最高位为1,表示此数为负数;最高位为0,表示 此数为正数。有符号的数可以表示正数,也可以表示负数。

    无符号数:只能表示正数。

    展开全文
  • 一个简单的二进制转为十进制,包括有符号位和无符号位的两种转换方式。
  • 本文实例讲述了PHP实现十进制二进制、八进制和十六进制转换相关函数用法。分享给大家供大家参考,具体如下: ...bindec()将所有的$binary_string值解释为无符号整数。这是因为bindec()函数将其最
  • 整数相比浮点数在计算机数字存储中算是最基础、最简单的二进制存储结构,通常情况下在任意编程语言中不会遇到本文所述的无符号整数转有符号整数的问题(或者借助语言专有的方法亦可轻松转换),但是如果遇到存储的...
  • 怎么用python二进制转换十进制

    千次阅读 2020-11-26 03:00:07
    绒绒小梧桐2020-02-24 10:13:41二进制十进制,十进制二进制的算法十进制二进制:用2辗转相除至结果为1将余数和最后的1从下向上倒序写 就是结果例如302302/2 = 151 余0151/2 = 75 余175/2 = 37 余137/2 = 18 余...
  • 题目:将一个无符号整数转换为任意 d 进制数( 2 ≤ d ≤ 16 )。 思路:先举个例子。十进制100怎么转换二进制呢? 记住:d进制的数就是0~(d-1)。 一般都是用辗转相除法(应该是叫这个名字),我比较喜欢这样写,...
  • 最近在做一个关于带符号二进制整数十进制的一个小case,去网上搜了很多,发现现有的程序不是很复杂就是写的让人看得不是很明白,针对这个过程,自己写了两个比较简单易懂的函数去实现。 def add_1(binary_inpute):...
  • 给出一个无符号十进制的正整数N,求这个数N的十六进制。 “除R取余法”:十进制整数转换成R进制整数,可用十进制整数连续地除以R,每次除法获得的余数即为相应R进制数一位,最后商为零时,按逆序输出结果。 例如...
  • 符号二进制数转换十进制数(python实现) 算法参考站内一个老哥,自己加了几句,加了个判断符号功能和一些注释 以下链接: 二进制转换十进制 sum = 0 str1 = input('请输入一个二进制数:') lenth = len(str1) #...
  • //假设我这里输入的使“556” 将会... //转换成响应的8进制数 while(*++p){ //输入“556 ” n=(n*8)+*p-'0'; // 1. n=(5*8)+5 2.n=((5*8)+5)*8+6 5*8次方+5*8一次方+6 } printf("%d\n",n); } 在这里插入
  • Java将十进制转换为8位二进制(Java convert from decimal to 8-bit binary)我写了简单的java代码来从十进制转换为8位二进制:抱歉这个愚蠢的问题1 int dec=1;2 String result="";3 String reverse = "";4 while(dec!...
  • 尝试将二进制列表转换为有符号的16位小端整数input_data = [['1100110111111011','1101111011111111','0010101000000011'],['1100111111111011','1101100111111111','0010110100000011']]Desired Output =[[-1074, -...
  • 从键盘输入1个小于65536的无符号十进制整数,将其转换成16位二进制,并输出。 具体要求完成的功能如下: 1)如输入负数,则输出 “数据小于0” 2)如超过65535,则输出“超过最大数” 3)输出转换过的16位二进制数...
  • 标题:整数进制转换(十六进制,十进制二进制)--表格法在计算机里,最基本的存储单位为字节(Byte,常说的大B),1个字节包含8位(bit,常说的小b)。计算机的数据就是一个字节一个字节的形式存储在内存中。内存的大小...
  • package pro;... * 从键盘输入某个进制整数,转换成对应的二进制整数并输出。  *  * @author 常朋辉  */ public class Homework {  public static void main(String[] args) {  package...
  • 一、十进制二进制 1、正整数二进制 要点:除二取余,倒序排列,高位补零。 方法:使用反除号将正的十进制数除以二,得到的商再除以二,一...1、整数二进制转化成十进制 方法:首先将二进制数补齐位数,首位如果是0
  • //即所有的负值的byte的补码和源码想象为无符号的话之和为256 -(NSString *)unsignedSixteenChangeTenString:(NSString *)sixteenStr { NSString *twoBrand = [self getBinaryByhex:sixteenStr];//二进制有无...
  • 进制整数012表示十进制的________。

    千次阅读 2021-07-26 05:57:59
    8位二进制补码表示十进制整数的范围是()。A.8B.16C.32D.64八进制36转化为十进制为27。()在C++语言中,整数可用3种数制表示,它们分别为:十进制、八进制和【】。编写一个算法,对于输入的十进制非负整数,将它的八进...
  • 注意:此答案主要适用于无符号数据类型.为了转换为签名类型,需要一些额外的步骤,讨论here.bin2dec功能是一个选项,但要求您先将矢量更改为字符串.与自己计算数字相比,bin2dec也可能比较慢.这是一个大约快75倍的解决...
  • 在计算机编程过程中,各种进制的转换很多,...那么同一组二进制数据在转有符号和无符号变量时有什么关联呢? 通常我们将二进制数据进行反码、补码计算,再进行转换,计算比较复杂。 假设一个二进制数据为1000..
  • C++---将十进制整数转换二进制

    千次阅读 2018-03-18 15:21:10
    #include "stdafx.h" #include &lt;iostream&gt; using namespace std; void change(int x) { //程序功能:将十进制整数转换二进制数 int n = 0; //x为输入的...
  • 二进制转换成十进制二进制转换成十进制
  • 把两个无符号的字符,拼接一个有符号的十进制数,方法是:将高位的字符左移8位,然后位或低8位的字符。 (2)判断符号。单独提取最高位的位。方法:要提取的变量位与0x8000 (3)将补码表示的负数,转...
  • 十进制二进制

    2021-06-24 12:40:04
    十进制转换二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。中文名十进制二进制外文名Decimal system to binary system适用领域电子、编程、编码...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 53,977
精华内容 21,590
关键字:

十进制转换成无符号二进制整数