精华内容
下载资源
问答
  • 十进制数转换为二进制数有符号)Matlab
  • 今天看书突然碰到...马上google了一下, 原来取反加1就是负数的值, 比如一个32位的有符号二进制数: 11111111111111111111111111111111 取反 (又叫反码, 正数的反码为本身) 000000000000000000000000000000...
    今天看书突然碰到有符号二进制的概念。。。除了还记得高位0表示正数, 1表示负数之外, 死活都想不起来怎样把负的二进制转换为十进制了。

    马上google了一下, 原来取反加1就是负数的值, 比如一个32位的有符号二进制数:
    11111111111111111111111111111111
    取反 (又叫反码, 正数的反码为本身)
    00000000000000000000000000000000
    加1 (有叫补码, 正数的补码也是本身)
    00000000000000000000000000000001

    于是就可以知道它表示十进制的 -1

    晕死, 忘老本。。。 强烈鄙视一下自己 :?:
    展开全文
  • Excel实现有符号十进制数转二进制数

    千次阅读 2017-08-31 18:41:53
      最近需要用到将Excel中范围为-1023~+1023的数据转换为二进制,其实这个...  Excel中自带十进制转二进制的函数,DEC2BIN,就是这个函数,我们来看一下这个函数的用法,这个函数两个参数,number和[places],...

      最近需要用到将Excel中范围为-1023~+1023的数据转换为二进制,其实这个问题完全可以通过Matlab编程来解决,但是呢,得到的结果要重新复制进Excel表格中,也没有那么方便,所以想直接用Excel中的公式来进行十进制转二进制操作。

      Excel中自带十进制转二进制的函数,DEC2BIN,就是这个函数,我们来看一下这个函数的用法,这个函数有两个参数,number[places],这里的[places]指的是要使用的字符数,什么意思呢,我们先来看一个简单的例子。

      =DEC2BIN(2)
      =DEC2BIN(2,3)
      =DEC2BIN(2,0)
    

      我们先看第一个式子,这个式子的计算结果是11,答案很显然。那我现在把式子换成下面那个呢,结果会变成什么呢。第二个式子的结果是011,也就是[places]的意思是最后生成的字符串长度,那假如说,我们现在有第三个式子,这个式子的结果是什么呢。编程直觉告诉我,答案应该跟一式一样,不过很遗憾的是我错了,显示的结果是#NUM!。意思很明确,就是说如果实际长度超过[places],那么就会返回错误。

      看完[places]这个参数,我们再来看一下number这个参数。这个参数的范围是-512~511。但是我现在想要处理的数据范围是-1023~1023,那怎么弄呢。先不管负数那部分,我先只考虑正数这部分。一个大于511的正数要如何转化为二进制呢。后来想了一下,把这个数分为两部分,我们设这个正数为A吧。一部分为A除以512得到的整数结果,另一部分是A除以512得到的商,我们分别设这两部分为B和C,很显然,对于一个小于512×512的A,得到的B和C都是512以内的,那么我们对B和C分别进行十进制转二进制运算就可以得到正确结果了。

      那么如何去考虑负数呢,我们考虑一下正负数的二进制之间的关系。对于范围在-1023~+1023之间的数字,其二进制可以用11位来表示,我们考虑一下-1转换为11位的有符号二进制数,得到的结果是11111111111。我们把最高位抛去,就是10个1,把这串字符串当成无符号型十进制整数,就是1023。也就是对于一个-1023~-1的负数,转换为11位的二进制数,其最高位为1,后面的10位就是该值加上1024得到结果的二进制数,于是我就写了如下代码。
    =IF(A6>=0,DEC2BIN(A6/512,2)&DEC2BIN(MOD(A6,512),9),1&DEC2BIN((A6+1024)/512,1)&DEC2BIN(MOD((A6+1024),512),9))

      这段代码什么意思呢,首先是一个IF语句,判断当前位置的数是正数还是负数,如果是正数,则执行前面部分,若为负数,则执行后面部分内容。在正数情况下,将该数值分为两部分,将除以512得到的商转换为一个2位的二进制数值,可想而知,因为该数小于1024,所以这个二进制数的第一位肯定为0。将除以512得到的余数转换为一个9位的结果。于是对于一个小于1024的正数,其二进制数就可以求取出来了。这里有个要注意的细节在于这里的等号,一般情况下,等于的情况两边都能成立,但是这里不是,只有前边的情况能满足,后边的情况不能满是,因为0+1024=1024,而1024必须用11位二进制进行表示。

      后半部分是负数情况下的求取,我们先把这个负数加上1023,再把得到的这个正数转换为11位的二进制数,转换方法跟前面的一致,然后再在前面添一个符号位1,构成了一个11位的有符号型二进制数。

    442 => 00110111010
    -63 => 11111000001
    

      看一下计算结果,结果显示计算是正确的。

    展开全文
  • 带小数的二进制转十进制 看到的都是 理论 没有代码, 今天把自己的公布下,欢迎指正(部分是借用别人的)如疏漏,恳请指出。 #include <stdio.h> #include <string.h> #include <math.h> void ....

     

    就是把十六进制转成二进制用补码求
    然后在把二进制转成十进制
    FBH最后的H表示的是16进制数
    FB转成二进制就是 1111 1011
    取反加1就是 1000 0101就是-5了
    其中第一位不用取反了 ,因为是负数

    带小数的二进制转十进制   看到的都是 理论 没有代码, 今天把自己的公布下,欢迎指正(部分是借用别人的)如有疏漏,恳请指出。
    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    void fun2_10(char str[], int j, int len) //带小数的二进制转十进制
    {
        int k = j + 1; //将k指向小数部分第一位
        int cetz = 0, cetx = -1;
        double Sumz = 0;
        double Sumx = 0;
        if (str[0] == '1') // 符号位 == 1
        {
            // 逆补码
            for (int i = j - 1; i > 0; i--)
            {
                str[i] -= 1;
                if (str[i] == '0')
                    break;
                else
                    str[i] = '1';
            }
            // 逆反码
            for (int i = j - 1; i > 0; i--)
                str[i] == '0' ? (str[i] = '1') : (str[i] = '0');
            // 二转十公式
            for (int i = j - 1; i > 0; i--) //整数部分逆向累加
            {

                Sumz += (str[i] - '0') * pow(2, cetz);
                cetz++;
            }
            Sumz = 0 - Sumz; // 取负
        }
        else                   // 符号位 == 0
            for (; j > 0; j--) //整数部分逆向累加
            {

                Sumz += (str[j - 1] - '0') * pow(2, cetz);
                cetz++;
            }

        //

        for (; k < len; k++) //小数部分正向累加
        {
            Sumx += (str[k] - '0') * pow(2, cetx);
            cetx--;
        }
        printf("%lf\n", Sumz + Sumx); //整数部分加小数部分
    }
    int main()
    {
        int j, k;
        char str[100];
        strcpy(str, "001000010.1000010");   //66.515625
      //  strcpy(str, "101010111.1001010");  // -168.421875
        int len = strlen(str);    //统计字符串长度
        for (j = 0; j < len; j++) //统计整数部分长度
        {
            if (str[j] == '.')
                break;
        }
        fun2_10(str, j, len);
        return 0;
    }

    展开全文
  • 本文实现的是将十二位的有符号二进制数转换为十进制数: 由于在数字在显示中,如果高位为0会在显示中被省去,所以,这里无法检测到每个的位数都为12位,也就是无法全部检测到12位的符号位。 比如: 000011110000...

    实现原理

    本文实现的是将十二位的有符号的二进制数转换为十进制数:

    由于在数字在显示中,如果高位为0会在显示中被省去,所以,这里无法检测到每个数的位数都为12位,也就是无法全部检测到12位的符号位。

    比如: 000011110000, 在显示的时候只会显示: 11110000
    如果此时检测最高位是否为1, 就只会检测到第8位为1,检测为负数。

    所以由于是将12位有符号位的二进制数转换,也就是说,它的范围为:[-2047,2047],正数的最大值: 0111 1111 1111.
    只要检测到输出的值大于211-1, 就进行补码的转换。

    实现代码

    cstr = textread('C:\Users\Documents\0\Qin0.txt','%s');   % 输入txt文件
    m = 12;						% 12 bits
    n = length(cstr);			% 需要转换的数字个数
    Qin0 = zeros(n,1);		
    for i=1:n
        Qin0(i) = bin2dec( cstr{i} );	%将所有二进制数转换为无符号位十进制数
        if(Qin0(i)>2047)					% 如果结果大于2047
                Qin0(i)=bin2dec(cstr{i})-2^m;				% 转换为负数
        end
    end
    

    代码结果:

    输入的12位数字: cstr
    转换后的数字:
    Qin0

    展开全文
  • 十进制有符号数转二进制MATLABD程序

    千次阅读 2017-08-21 11:33:31
    在testbench中输入txt文件时,通常需要用到$readmemb或者$readmemh函数,它们的输入分别是二进制数和十六进制数,这个时候通常需要将有符号的二进制数转换为对应的二进制数和...下面为自己写的一个十进制有符号数转二进
  • 二进制数转十进制数

    2014-06-07 17:03:27
    帮研究生同学写的一个数制转换代码,将二进制数据转换为十进制数,需转换的数据格式为: 1.每行数据的第一个为任意数制,仅作为标识,可能为正,也可能为负,无需转换,直接去除; 2.每行余下的数据为二进制数据,...
  • 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E...
  • 有符号十进制数转换成二进制

    千次阅读 2016-05-28 11:48:56
    function [numbin] = dec2binPN(numdec,N) %判断输入正负 if (numdec >= 0) %正数转二进制 numbin1 = dec2bin(numdec,N); else %负数转二进制 numbin1 = dec2bin(abs(numdec),N);
  • % 8 是指变成8位的二进制数,例如 a = 3 ,则 bin 就是 0000_0011 当数字a小于0的时候,这样操作: bin = dec2bin( a + 2^8 , 8 ); % 8 还是8位的意思,比如 a = -3 ,则 bin 就是 1111_1101 操作一个一维数组...
  • 二进制的整数如下几种形式 原码:直接将一个数值转换成二进制。最高位是符号位。 负数的反码:是对原码按位取反,只是最高位(符号位)确定为1. 负数的补码:其反码加一。 最高位是0为正数,为1是负数。 计算机以...
  • 有符号十六进制转十进制 c++

    千次阅读 2016-04-23 17:36:31
    实践中遇到有符号十六进制需要转化成十进制数,编程如下,如有疏漏,恳请指出。int hextode(char* hex) { if(hex ==NULL) return 0; char binary[17]={0};//放二进制字符串 char* hexstr="006C";//一个16进制...
  • 在一些数据处理过程中,需要将一组十进制小数转换成二进制数存储或者计算,这种操作在FPGA的使用中会经常遇到。本文分析了十进制小数转换成二进制数的方法。 1.N位二进制数的取值范围 N位无符号型(unsigned)取值...
  • 进制的概念: 因为不可能为每个数值都创造一个符号,所以需要用基本数字组合出复合的 数值,这样就有了进制的... 计算机编程中常用的进制有二进制、八进制、十进制和十六进制,十进制还 是最主要的表达形式。 ...
  • 参考了CSDN上一个大佬的代码,学习了做一下记录。 #include <iostream> using namespace std;...//放二进制字符串 //Convert strings to a long-integer value. long i32=strtol(hexstr,NULL,1
  • 1.首先将十进制负数转换成相反; 2.计算相反二进制; 3.二进制取反后再加一就得到负数的二进制; 例如: -14 => 14 => 0000 1110 => 1111 0001 => 1111 0010 明确: 有符号类型的数字才有符号...
  • 计算机中四种进制方式: 1、二进制:由0和1两个数字组成。 2、八进制:八个符号,由0~7八个数字组成。开头一般以0开头。 3、十进制:十个符号,由0~9十个数字组成,不能以0...(1)二进制转十进制:按权展开求和...
  • 如将以十六进制表示的温度度数以数码管的形式显示,如有符号数16'b1111 1111 1101 1111,表示成-2.0625度 wire [15:0] t_buf = temp[15] ? (~(temp - 1'b1)) : temp;//temp为实际读到的芯片度数,十六进制补码形式 ...
  • 十进制转换成二进制

    2018-04-19 20:57:14
    问题 B: Hz的进制时间限制: 1 Sec 内存限制: 128 MB提交: 20 解决: 14[提交][状态][讨论版]题目描述Hz遇到一个数学问题,想请教聪明的你:给定一个有符号整数类型的,Hz想知道该数二进制表示中1的个数。...
  • 二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。 如果参数为负,该无符号整数值为参数加上 232;否则等于该参数。将该值转换为二进制(基数 2)形式的无前导 0 的 ASCII 数字字符...
  • 十六进制转二进制

    2020-06-24 21:09:06
    二进制是计算机中数据的一种表示方法,只有两个符号0和1,分别代表十进制数值0和1。 十六进制是计算机中数据的一种表示方法,与十进制的对应关系是:十六进制的0~9对应十进制数值0-9,A~F对应十进制数值10-15。 ...
  • 【汇编】求十进制数的补码并转二进制和十六进制输出(多组输入...用于存放输入的十进制数 这里十进制数在-32768~32767之间(16位有符号数) ;可以出现负数,此程序功能为用二进制和十六进制显示这个十进制数的补码 d
  • 有符号二进制数的乘法

    万次阅读 多人点赞 2017-01-07 12:19:07
    最近在阅读《深入理解计算机系统》讲到补码...如果直接算出来十进制是-9然后转换为6为二进制我也能理解,但是我很好奇他利用了什么规则得出这样的结果。 根据结果推过程我认为计算机做计算都要按照正数或者说无符号数
  • 二进制是计算机中数据的一种表示方法,只有两个符号0和1,分别代表十进制数值0和1。 十六进制是计算机中数据的一种表示方法,与十进制的对应关系是:十六进制的0~9对应十进制数值0-9,A~F对应十进制数值10-15。 ...
  • 计算机中二进制的计算均是用补码计算的,我们平时所说的二进制通常也是补码,需要注意二进制首位字符为符号位。以下是对这些概念的理解 原码:一个整数,转换成二进制数,称为原码; 如:①一个整数,其数值为9...
  • 算法-求二进制数中1的个数 问题描述 任意给定一个32位无符号整数n,求n的二进制表示中1的个数,比如n = 5(0101)时,返回2,n = 15(1111)时,返回4 这也是一道比较经典的题目了,相信不少人面试的时候可能...
  • 十进制有符号十进制 --> 二进制有符号十进制 --> 十六进制有符号十六进制 --> 十进制二进制减法X86处理器构架一般概念 进制转换 补码表示 负整数用补码表示时,使用的数学原理是:一个整数的补码是其...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 552
精华内容 220
关键字:

二进制转十进制有符号数