尝试实现一个函数以返回位字符串的二进制补码。我试过两个品种,但结果却很奇怪。

版本1(执行倒置,但不执行“ +1”):
字符串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


我一直在尝试这两个函数的各种迭代。我对此已经精疲力尽。如果有人有更好的选择-目前,我非常愿意提出建议。

最佳答案

(abs(number) ^ 0xffffffff) + 1怎么样,然后将该值转换为字符串?

编辑:而且,为什么是size = 3?整数通常是32位

关于c++ - 二进制补码功能出现问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14805433/

10-10 01:47