精华内容
下载资源
问答
  • 二进制转十进制有符号数
    千次阅读
    2020-11-20 16:57:52
      在计算机编程过程中,各种进制的转换很多,二进制转为十进制在C语言中有强制转换的方式。在CAN报文解析的时候,从数据中取出的二进制端,长度可能不是正好一个字节,这个时候如果要求数据是有符号的,需要单独写程序。
      首先我们需要理解有符号和无符号变量的区别,以1个字节十进制为例,有符号的取值范围为-127~+127,无符号取值范围为0-255;那么同一组二进制数据在转成有符号和无符号变量时有什么关联呢?
      通常我们将二进制数据进行反码、补码计算,再进行转换,计算比较复杂。
      假设一个二进制数据为100000110;长度L为9;转为无符号十进制X为262
      转为有符号十进制Y简单算法如下公式:
      如果十进制数字小于2的8次方,Y = X 								(X < 2^(L-1));
      如果十进制数字小于2的8次方,Y = X - 2^(L-1)				(X  ≥  2^(L-1));
      由此,Y = -6
    
    更多相关内容
  • 1、此matlab文件可以实现有符号十进制数向任意格式定点补码二进制数据的转化:例如 fix16_13格式的定点二进制转化 ,-1.75:'1100100000000000' 0.75:'0001100000000000' 2、如果对定点数据格式不清楚的话,此处...
  • matlab实现十进制二进制定点有符号补码小数的转换,其中定点小数的整数部分位长和小数部分位长可以自己指定,输出的最高位表示符号位(0为整数,1为负数),补码表示
  • 本文实现的是将十二位的有符号二进制数转换为十进制数: 由于在数字在显示中,如果高位为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

    展开全文
  • 有符号二进制转10进制

    千次阅读 2021-03-15 11:21:53
    原理就是:正数的源码+负数的源码= 256 比如补码和源码 //即所有的负值的byte的补码和源码想象为无符号的话之和为256 -(NSString *)...//二进制有无符号 11111111 // twoBrand = @"10000001"; i...

     

    原理就是:正数的源码+负数的源码= 256

    比如 补码和源码

    //即所有的负值的byte的补码和源码想象为无符号的话之和为256

    -(NSString *)unsignedSixteenChangeTenString:(NSString *)sixteenStr

    {

        NSString *twoBrand = [self getBinaryByhex:sixteenStr];//二进制有无符号 11111111

    //    twoBrand = @"10000001";

        if (!twoBrand.length) {//防止为空

            return @"0";

        }

        NSString *firstText = [twoBrand substringToIndex:1];

        

        NSString *tenBrand = [self getDecimalSystemWithBinarySystem:[twoBrand substringToIndex:twoBrand.length-1]];

        

        if ([firstText isEqual:@"0"]) {//正数

            return tenBrand;

        }

        tenBrand = [self getDecimalSystemWithBinarySystem:[twoBrand substringToIndex:twoBrand.length]];

        NSString *totalBrand = [@"1" stringByAppendingString:[self getNull0TextWithLength:twoBrand.length]];//二进制有无符号 100000000

        NSString *totaltenBrand = [self getDecimalSystemWithBinarySystem:totalBrand];

        //否则负数

        NSInteger value = tenBrand.integerValue-totaltenBrand.integerValue;

        return [NSString stringWithFormat:@"%@",@(value)];

    }

     

    - (NSString *)getNull0TextWithLength:(NSInteger)length

    {

        NSString *text = @"";

        for (NSInteger i= 0; i<length; i++) {

            text = [text stringByAppendingString:@"0"];

        }

        return text;

    }

     

    #pragma mark --- 2进制转10进制

    - (NSString *)getDecimalSystemWithBinarySystem:(NSString *)binary{

        int ll = 0 ;

        int  temp = 0 ;

        for (int i = 0; i < binary.length; i ++){

            temp = [[binary substringWithRange:NSMakeRange(i, 1)] intValue];

            temp = temp * powf(2, binary.length - i - 1);

            ll += temp;

        }

     

        NSString * result = [NSString stringWithFormat:@"%d",ll];

        return result;

    }

    展开全文
  • 一个简单的二进制转为十进制,包括有符号位和无符号位的两种转换方式。


    为便于理解,不采用自定义函数形式而直接使用主函数main,有需要的自行改写。

    无符号位二进制转换为十进制

    方式一:

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <string.h>
    #define MAXRANGE 256
    
    int main()
    {
        char binaryScanf[MAXRANGE]; // 无符号字符二进制
        int intBinaryScanf[MAXRANGE];   // 存储每个二进制元素
        long int decimal = 0;
        
        scanf("%s", binaryScanf);   // 输入二进制数
        for(int i = 0, j = strlen(binaryScanf); i < strlen(binaryScanf); i ++)  // 字符二进制逆序转数型
            intBinaryScanf[i] = binaryScanf[--j] - '0';	// 字符变数型
    
        for(int i = 0; i < strlen(binaryScanf); i ++)
             decimal += intBinaryScanf[i] * (int)pow(2,i);     // 进制二转十公式
        printf("%lu\n",decimal);
    
        return 0;
    }
    

    方式二:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
    int main(void)
    {
        char str_bin[32];
        gets(str_bin);
        int sizeBin = strlen(str_bin);
        int sum = 0;
        for(int i = 0; i < sizeBin; i ++)
            sum += (int)pow(2,(sizeBin-1-i)) * (str_bin[i] - '0');
        printf("%d",sum);
    	return 0;
    }
    

    运行结果:
    无符号二进制转十进制

    有符号位二进制转换为十进制

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <string.h>
    #define MAXRANGE 256
    
    int main()
    {
        char binaryScanf[MAXRANGE]; // 有符号字符二进制
        int decimal = 0;   // 所求十进制
    
        scanf("%s", binaryScanf);   // 输入二进制数
    
        if(binaryScanf[0] == '1')   // 符号位 == 1
        {
        	// 逆补码
            for(int i = strlen(binaryScanf) - 1; i > 0; i --)
            {
                binaryScanf[i] -= 1;
                if(binaryScanf[i] == '0')
                    break;
                else
                    binaryScanf[i] = '1';
            }
            // 逆反码
            for(int i = strlen(binaryScanf) - 1; i > 0; i --)
                binaryScanf[i] == '0' ? (binaryScanf[i] = '1') : (binaryScanf[i] = '0');
            // 二转十公式
            for(int j = 0, i = strlen(binaryScanf) - 1; i > 0; i --)
                decimal += (binaryScanf[i] - '0') * (int)pow(2,j++);
            decimal = 0 - decimal;  // 取负
        }
        else    // 符号位 == 0
            for(int j = 0, i = strlen(binaryScanf) - 1; i > 0; i --)
                decimal += (binaryScanf[i] - '0') * (int)pow(2,j++);
        printf("%d\n",decimal);
        return 0;
    }
    
    

    运行结果:
    有符号位二转十
    符号位 == 0 の处理方法二

    int intBinaryScanf[MAXRANGE];   // 存储每个二进制元素
    
    for(int i = 1, j = strlen(binaryScanf) - 1; i < strlen(binaryScanf); i ++)  // 字符二进制逆序转数型
    	intBinaryScanf[--j] = binaryScanf[i] - '0';	// 字符变数型
    for(int i = 0; i < strlen(binaryScanf) - 1; i ++)
    	decimal += intBinaryScanf[i] * (int)pow(2,i);     // 进制二转十公式
    

    关于二进制转十进制说明

    有符号位二转十:

    1. 判断符号位(最左端)为0或1
    2. 若为1:
    1. 二进制码 - 1(逆补码)
    2. 二进制码 反码,即1变0,0变1(逆反码)
    3. 二进制码公式:除了最左端的符号位,对经前两步处理过的二进制码,自右向左,每个位数依次 × 2 的 0,1,2,3……次方并求和。
    4. 给求和后的数加个负号“-”。
    1. 若为0:

    直接套用二进制码公式:除了最左端的符号位,对当前二进制码,自右向左,每个位数依次 × 2 的 0,1,2,3……次方并求和。
    有符号位二转十

    无符号位二转十:
    直接套用二进制码公式:对当前的二进制码,自右向左,每个位数依次 × 2 的 0,1,2,3……次方并求和。
    无符号位二转十

    展开全文
  • 符号二进制数转换十进制数(python实现) 算法参考站内一个老哥,自己加了几句,加了个判断符号功能和一些注释 以下链接: 二进制转换十进制 sum = 0 str1 = input('请输入一个二进制数:') lenth = len(str1) #...
  • 二进制转换十进制 算法解析

    千次阅读 2021-03-06 16:26:56
    java里面是进制间互换现成的方法的:public class十进制与各进制的相互转换 {public static voidmain(String[] args){//java已经实现的机制:十进制转换为二进制int decimal = 10;System.out.println("十进制数:"+...
  • python input函数进制转换 input()函数-控制输入的进制 格式化符号 ... s=int(input(),2) #输入二进制并将其转换为十进制 通过格式化符号进行转化 这里用输入一个十六进制的为例子 n=int(input(),
  • matlab 实现二进制十进制相互转换

    千次阅读 2021-07-07 19:03:53
    dec2bin():该函数实现从十进制二进制的转换。调用格式:b=dec2bin(a)。其中b为二进制,a为十进制。 bin2dec():该函数实现...二进制数转换十进制数据如下: %%%%%%% cstr0 = textread('C:\Users\xxxx.txt','%s'); %
  • 有符号十进制转二进制 matlab

    千次阅读 2021-03-31 15:32:32
    % 8 是指变成8位的二进制数,例如 a = 3 ,则 bin 就是 0000_0011 当数字a小于0的时候,这样操作: bin = dec2bin( a + 2^8 , 8 ); % 8 还是8位的意思,比如 a = -3 ,则 bin 就是 1111_1101 操作一个一维数组...
  • 怎么用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 余...
  • 十进制数转换为二进制数有符号)Matlab
  • //将一个八位的二进制数转换为十进制 #include<iostream> #include<cstdio> using namespace std; int convert(char *a){ int sum=0; int q=1; for(int i=7;i>=0;i--){ if(a[i]=='1'){ sum+=q; ...
  • Java将二进制转换为十进制

    千次阅读 2021-04-09 10:25:18
    本文概述我们可以使用Integer.parseInt()方法或自定义逻辑在Java中将二进制转换为十进制。Java二进制十进制的转换:Integer.parseInt()Integer.parseInt()方法使用给定的redix将字符串转换为int。 parseInt()方法...
  • 十进制转二进制

    2021-06-24 12:40:04
    中文名十进制转二进制外文名Decimal system to binary system适用领域电子、编程、编码应用学科数学十进制转二进制二进制转十进制编辑语音十进制转二进制方法一小数点前或者整数要从右到左用二进制的每个去乘以2的...
  • 在一些数据处理过程中,需要将一组十进制小数转换成二进制数存储或者计算,这种操作在FPGA的使用中会经常遇到。本文分析了十进制小数转换成二进制数的方法。 1.N位二进制数的取值范围 N位无符号型(unsigned)取值...
  • //十进制转二进制 Console.WriteLine(Convert.ToString(69, 2)); //十进制转八进制 Console.WriteLine(Convert.ToString(69, 8)); //十进制转十六进制 Console.WriteLine(Convert.ToString(69, 16)); //二进制...
  • 二进制表示法在计算机科学中很重要,计算机中存储的所有...十进制的数字如何转换成二进制的,举几个例子就明白了:图片来自https://www.geeksforgeeks.org/program-decimal-binary-conversion/将17作为被除,除以2...
  • 二进制如何转换为十进制?

    千次阅读 2021-06-19 05:54:00
    二进制十进制数字转换使用加权列来标识数字的顺序以确定数字的最终值将二进制转换为十进制(base-2到base-10) )数字和背面是一个重要的概念,因为二进制编号系统构成了所有计算机和数字系统的基础。十进制或...
  • Matlab将十六进制转换为十进制数有符号)(十六十)
  • %SDEC2HEX 将有符号十进制整数转换为十六进制字符串。 % SDEC2HEX(D) 返回一个维字符串数组,其中每一行是% D 中每个十进制整数的十六进制表示。 % D 必须包含小于 2^52 的有符号整数。 % % SDEC2HEX(D,N) 生成一...
  • matlab开发-将二进制字符串转换为十进制值。它将二进制流转换为十进制值,每次8位,尽管您可以更改它。
  • C++实现读入二进制数并转换为十进制输出题目描述已知一个只包含0和1的二进制数,长度不大于10,将其转换为十进制并输出。输入描述输入一个二进制整数n,其长度不大于10输出描述输出转换后的十进制数,占一行样例输入...
  • 注意:此答案主要适用于无符号数据类型.为了转换为签名类型,需要一些额外的步骤,讨论here.bin2dec功能是一个选项,但要求您先将矢量更改为字符串.与自己计算数字相比,bin2dec也可能比较慢.这是一个大约快75倍的解决...
  • 二进制数十进制数的转换 聊二进制数的运算前,我们先看看二进制数的值与十进制数的值是如何相互转换的, 十进制转换成二进制十进制数除以2,得到的商再除以2,依次类推直到商为1时为止,然后在旁边标出各步的...
  • //二进制转为十进制方法 if(set == 0) //输入0为结束条件 break; else //当异常发生会跳过异常语句后面的语句 System.out.println("the bin for num is " + set); //写在try里是因为发生错误就不执行 } catch...
  • c语言二进制怎么转换十进制

    千次阅读 2021-05-23 06:40:24
    按照如下步骤即可用C语言把二进制数转换成十进制数的程序:推荐:《C语言教程》1、首先在主函数中设置成函数Sum,另外定义了一个数组array[8],用于存放输入的八位二进制数。2、然后使用了一个for循环语句,用于输入...
  • 十六进制格式的带符号二进制转十进制计算方法`~` 操作符转换演示正确转换方式 这个问题必须记录一下,我以为转换就是直接按位取反,但是结果总是不对,经过分析后才发现数据分析就问题,那当然接下来怎么做都不会...
  • 用汇编语言实现无符号数二进制输入转十进制输出

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 187,596
精华内容 75,038
热门标签
关键字:

二进制转十进制有符号数