其他分享
首页 > 其他分享> > 在C中,n位为二进制到十进制

在C中,n位为二进制到十进制

作者:互联网

我试图使用stoi将一串带符号的二进制数转换为C中的十进制值,如下所示.

 stoi( binaryString, nullptr, 2 );

我的输入是2s格式的二进制字符串,只要位数为8,stoi就可以正常工作.例如“1100”结果12因为stoi可能将其视为“00001100”.

但对于4位系统,1100s 2s格式等于-4.任何线索如何在C中对任意位长2s数进行这种转换?

解决方法:

处理位数较少的数字的sigendness:

>转换二进制 – >十进制
>如果设置了有符号位,则计算2s补码(无论您的符号位取决于字长).

.

#define BITSIZE 4
#define SIGNFLAG (1<<(BITSIZE-1)) // 0b1000
#define DATABITS (SIGNFLAG-1)     // 0b0111

int x= std::stoi( "1100", NULL, 2);  // x= 12 
if ((x & SIGNFLAG)!=0) {        // signflag set
    x= (~x & DATABITS) + 1;     // 2s complement without signflag
    x= -x;                      // negative number
}
printf("%d\n", x);              // -4

标签:twos-complement,c,decimal,binary
来源: https://codeday.me/bug/20190723/1509483.html