1

現時点では、数値をビットに出力するスクリプトを持っているので、たとえば

print((short) 1);

の値を取得しますが00000001、このような値を取得するには00000001 00000000どうすればよいですか。これが私のコードです:print((int) 1);00000001 00000000 00000000 00000000

void printbyte(unsigned char x)
{
    for (int i = 0; i < 8; i++)
    {
        if (x & 0x80) cout << 1;
        else cout << 0;
        x = x << 1;
    }
    cout << endl;
}

template <typename T>
void print (T A)
{
    unsigned char *p = (unsigned char *) &A;
    printbyte(*p);
}

int main()
{
    print((short) 1);

    system("pause");
    return 0;
}
4

3 に答える 3

4

sizeof(T)withinを使用しprintて、処理するバイト数を決定しprintbyte、各バイトを呼び出すことができます。

#include <iostream>
#include <climits>

using namespace std;

void printbyte(unsigned char x)
{
    for (int i = 0; i < CHAR_BIT; i++)
    {
        cout << ((x & 0x80) != 0);
        x <<= 1;
    }
}

template <typename T>
void print (T A)
{    
    for (size_t i = 0; i < sizeof(T); ++i)
    {
        unsigned char b = A >> ((sizeof(T) - i - 1) * CHAR_BIT);
        //unsigned char b = A >> (i * CHAR_BIT); // use this for little endian output
        printbyte(b);
        cout << " ";   
    }
    cout << endl;
}

int main()
{
    print((short) 1);
    print((long long) 42);

    return 0;
}
于 2013-05-10T10:47:54.983 に答える
0

std::bitsetを使用する必要があると思いますが、コンパイル時に常にサイズを指定する必要があります。これを回避するには、次のようなテンプレート関数を使用できます (これは C++11 であることに注意してください)。

#include <iostream>
#include <bitset>
#include <limits>

template <class T> void PrintBits (const T &Number) {
    std::bitset<std::numeric_limits<T>::digits> Bit_Number(Number);
    std::cout << Bit_Number << std::endl;

}
于 2013-05-10T11:40:50.737 に答える