试图实现一个函数来返回一串位的二进制补码 . 我尝试了两个品种并得到奇怪的结果 .
版本1(进行反转但不是“1”):string twosComp(signed int number){
string twosComp(signed int number) {
if ( number == 0 ) { return "1"; }
if ( number == 1 ) { return "0"; }
if ( number % 2 == 0 ) {
return twosComp(number / 2) + "1";
}
else {
return twosComp(number / 2) + "0";
}
}
版本2(反转并尝试“1”,但并不总是正确)
string twosComp(signed int number) {
bool bit = 0;
int size = 3; // not sure what to do about this, value could be -32768 to 32767
string twos;
number = ~abs(number) + 1;
for(int i = 0; i < size; i++) {
//Get right-most bit
bit = number & 1;
if(bit) {
twos += '1';
}
else {
twos += '0';
}
//Shift all bits right one place
number >>= 1;
}
return twos;
} // end twosComp
我一直在尝试这两种功能的各种迭代 . 我对此已经失去了动力 . 如果有人有更好的选择 - 我现在非常愿意接受建议 .
3 回答
如何
(abs(number) ^ 0xffffffff) + 1
,然后将该值转换为字符串?编辑:另外,为什么
size = 3
? int通常是32位下面的代码做了你想要的短(16位)int:注意 - 我用C写的这不是C ...
作为参考,您可以查看以下链接,使用bitset将整数转换为2的C补码:http://2scomplimentcpp.blogspot.com.au/
您可以使用bitset的to_string()方法将表示转换为字符串 .