2015-10-19 52 views
1

我不確定爲什麼某些代碼格式不正確,所以如果難以閱讀,我很抱歉。我正在爲我的一個課程學習C++,但我被卡住了。我對這門語言知之甚少,所以我實在不知道接下來會發生什麼問題或做什麼。位操作,插入,二進制

該程序應該採用四個參數,一個二進制數,一個第二個二進制數,一個位置編號和來自新編號的位數。它應該從新的號碼中取出第一個(位數),並將它們插入原始位置(短)。

目標是讓底部的測試通過。我設法刪除所有的錯誤消息,但測試沒有通過,所以我必須在某處發生邏輯錯誤。

#include <iostream> 
#include <cassert> 
#include <bitset> 
#include <climits> 
using namespace std; 

    // Return the altered bits of "input" 
// where the first "numBits" of "newBits" (unspecified bits are 0) 
// replace "input" bits starting at "position" 

unsigned char set_bits_to(
    unsigned char input, 
    unsigned char newBits, 
    short position, 
    short numBits){ 
//Your Code Here 

    unsigned char insert; 
    int x; 
    int i; 
    int q = 0; 

    if (input < 225) { 
     bitset<4> o(input); 
     bitset<4> d(newBits); 


     for (x = 0; x < numBits; x++) { 
      insert = o[position] = d[q]; 
      q++; 
      position = position + 1; 
     } 

    } 


    // else { 
    //  bitset<8> x(input); 
    // }(input) 
    //bitset<8> x(input); 



    //Stop Code Here   
}; 

int main() { 

    assert(set_bits_to(0b1111, 0b0, 0, 1) == 0b1110); 
    assert(set_bits_to(0b1111, 0b0, 1, 1) == 0b1101); 
    assert(set_bits_to(0b1111, 0b0, 0, 3) == 0b1000); 

    assert(set_bits_to(0b11001100, 0b101, 2, 3) == 0b11010100); 
    assert(set_bits_to(0b11001100, 0b101, 2, 5) == 0b10010100); 
    assert(set_bits_to(0b11001100, 0b101, 3, 3) == 0b11101100); 
    assert(set_bits_to(0b11001100, 0b101, 5, 3) == 0b10101100); 

    assert(set_bits_to(0b1111, 0b101010, 0, 6) == 0b101010); 
    assert(set_bits_to(0b1111, 0b101010, 1, 6) == 0b1010101); 
    assert(set_bits_to(0b1111, 0b101010, 0, 3) == 0b1010); 

    cout << "All tests passed" << endl; 
    return 0; 
} 
+1

爲什麼它所含的B的呢? Idk爲什麼會起作用。此外,你沒有返回聲明。 –

+0

是的,我知道這一點,我的道歉。我有一個返回聲明,但是當我試圖找出某些東西時,我將其移動了。我想我忘了把它放回去。 – WolfGoddess

回答

1

這裏是我的解決方案:

char insert = (~0 << numOfBits) & newBits; // these bits would be inserted 
// this piece of code cleans bits between position and position - numOfBits 
char positioned = ((~0 << position) | // preserves bits from position to MSB 
    ~(~0 << (position - numOfBits)) // preservs bits from position to LSB 
     & input; 
input = positioned & insert << position; 
+0

我嘗試了您提供的方法,並且幸好沒有錯誤消息。不幸的是,測試仍然失敗。我一直在試圖找到一個C++程序來運行一個調試器,所以我可以遍歷代碼,看看它在做什麼,但我一直沒有找到。 – WolfGoddess

+0

我跑遍了代碼,並打印出第一個值,它出現在1111 ---> 0000.這其實並不正確,它只是缺少第一個值,應該是1000。 – WolfGoddess