Задание, которое я пытался выполнить, истекло, поэтому вы не выполняете мою домашнюю работу.
Ради обучения я хотел бы знать, как сделать несколько вещей.
Я был в состоянии сделать программу с маской, используя побитовые операторы, распечатать 1-32 в двоичном виде.
Проблема с маской, которую я использовал, состоит в том, что она также выведет 32 начальных нуля, за которыми следует двоичное число (например, 0000000000000000000000000000000001 для числа 1)
Вот что у меня было
# include <iostream>
#include <string>
using namespace std;
string naiveBitToChar( int num )
{
string st;
unsigned mask = 0x80000000;
if( num == 0 )
{
return "0";
}
while( ( num & mask ) )
mask >>= 1;
do
{
if ( num & mask )
{
st = st + "1";
}
else
{
st = st + "0";
}
mask >>= 1;
}
while( mask );return st;
}int main ( int argc, char* argv[] ) {
argc; argv;
for( int i = 0; i < 32; i++ )
cout << naiveBitToChar(i) << "\n";
system ("pause");
}
Я нуждался в:
Я новичок в C ++, мой учитель даже не посмотрел бы на мой код, пожалуйста, кто-нибудь объяснит, и постараюсь сохранить его базовым Спасибо!
Вот идея, используйте флаг, чтобы указать начальную нулевую цифру. Измените флаг, если бит равен единице. Печатайте цифру, только если она не является начальным нулем.
bool is_leading_zero = true;
while (/*... */)
{
// Convert bit to character in st
if (st == '1')
{
is_leading_zero = false;
}
if (!is_leading_zero)
{
cout << st;
}
}
Если вы сканируете справа налево, это будет проще, так как вам не нужно удалять начальные нули, а просто останавливаться, когда число равно 0:
std::string binary( unsigned n )
{
std::string bits;
for( unsigned mask = 1; true; mask <<=1 ) {
bits.insert( bits.begin(), n & mask ? '1' : '0' );
n &= ~mask;
if( !n ) break;
}
return bits;
}
Или даже проще:
std::string binary( unsigned n )
{
std::string bits;
do {
bits.insert( bits.begin(), n & 1 ? '1' : '0' );
n >>= 1;
} while( n );
return bits;
}
Чтобы изменить минимальное значение, вам нужно немного изменить условие цикла, чтобы добавить unserscore так же просто, как:
if( bits.length() % 4 ) bits.insert( bits.begin(), '_' );
внутри цикла