C++ 使用移位运算符将整数转换为基数8

C++ 使用移位运算符将整数转换为基数8,c++,bit-shift,C++,Bit Shift,我有一个家庭作业问题,使用移位运算符将用户定义的32位int转换为二进制。我想出了这个密码: unsigned int num; int x = 31; cout << "Number to be converted: "; cin >> num; while (x >= 0) { int y = num >> x; //using the shift operator if (!(y % 2)) cout

我有一个家庭作业问题,使用移位运算符将用户定义的32位int转换为二进制。我想出了这个密码:

unsigned int num;
int x = 31;
cout << "Number to be converted: ";
cin >> num;

while (x >= 0)
{
    int y = num >> x;       //using the shift operator
    if (!(y % 2))
        cout << "0";
    else
        cout << "1";
    x--;
}

cout << endl << endl;
unsigned int num;
int x=31;
cout>num;
而(x>=0)
{
int y=num>>x;//使用移位运算符
如果(!(y%2))

请注意,二进制的每三位给出相应的八进制值。因此,我们可以简单地进行三次移位并确定值

while (x >= 0)
{
    int y = num >> x;       //using the shift operator
    x--;
    int z = num >> x;
    x--;
    int a = num >> x;
    x--;
    int total = 4 * y + 2 * z + a;
    cout << total;
}
while(x>=0)
{
int y=num>>x;//使用移位运算符
x--;
intz=num>>x;
x--;
int a=num>>x;
x--;
整数合计=4*y+2*z+a;

cout另一种方法是使用移位和掩蔽:

unsigned int value;
unsigned int right_octal_digit = value & 0x07; // Mask off all but lower 3 bits.
unsigned int middle_octal_digit = (value >> 3) & 0x07;
unsigned int left_octal_digit = (value >> 6) & 0x07;
// ... etc.

一个八进制数字使用3个二进制位。

你说的是oop运算符重载?与其打开
y%2
的值,不如打开
y%8
的值,并修改移位方式。每个八进制数字中有3个位。如果(!(y%2))可以写入
我们可以观察到基数2和基数8是有关系的。如果你把一个基数2的字符串分成3块,那么就很容易得到基数8。例如,基数2中的10000101变为10000 101,这是基数8中的4 0 5。希望你能用这个来帮助解决你的问题。