私は独自のprintf(演習用)を作成する必要があり、符号なしの数値をバイナリベースで出力する%bフラグを追加する必要があります。私は関数を作成しましたが、まだ出力で符号なしの数値を取得しています。そこに私のコードがあります。前もって感謝します!C:バイナリベースで符号なし整数を出力する
int unsignednbr(unsigned int nb)
{
if (nb < 0)
{
putchar('-');
nb = nb * -1;
}
if (nb >= 10)
{
putnumber(nb/10);
putnumber(nb % 10);
}
else
putchar(nb + '0');
}
int unsigned_to_binary(int nb)
{
long long binary_nbr = 0;
int remainder;
int i = 0;
unsignednbr(nb);
while (nb != 0)
{
remainder = nb % 2;
nb /= 2;
binary_nbr += remainder * i;
i *= 10;
}
}
void own_printf(char* format, ...)
{
int i = 0;
va_list args;
va_start(args, format);
while (format[i])
{
if (format[i] == '%')
{
switch (format[i + 1])
{
case 'b':
unsigned_to_binary (va_arg(args, int));
break;
}
i++;
}
}
va_end(args);
}
int main()
{
own_printf("%b", -42);
return 0;
}
実際に何かを実行する前に* decimal *出力関数を呼び出しています。それを除けば、そのアイデアは非常に悪いです。ちょうどビットを反復し、 '0'または' 1'を出力します。 –
@Felixが指摘したこと以外に、両方の変換関数は 'int'と宣言されている間は何も返しません。また、unsigned print関数では、* unsigned *が負であるかどうかをチェックします。 – Mattenii
[ビットの印刷例](https://ideone.com/eGtfSn) –