在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