C++ 使用移位运算符将整数转换为基数8
我有一个家庭作业问题,使用移位运算符将用户定义的32位int转换为二进制。我想出了这个密码: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
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。希望你能用这个来帮助解决你的问题。