使用shift运算符将整数转换为base 8

时间:2016-10-20 22:33:03

标签: c++ bit-shift

我有一个功课问题是使用shift运算符将用户定义的32位int转换为二进制。我想出了这段代码:

getSharedPreferences()

运行得很好。作业的第二部分是详细说明并略微修改该代码,将用户定义的32位int转换为基数为8的数字,再次使用移位运算符。我不能为我的生活弄清楚如何使这项工作。

编辑:我已经尝试了一个开关,正如有人刚评论过的那样     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; 但这些选项都没有给我正确的输出答案。

2 个答案:

答案 0 :(得分:0)

请注意,二进制的每三位给出相应的八进制值。所以我们可以简单地做三个班次并确定价值。

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;
}

答案 1 :(得分:0)

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

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个二进制位。