我可以用printf打印十六进制或八进制数字。是否有格式标签打印为二进制或任意基数?
我正在运行gcc。
printf("%d %x %o\n", 10, 10, 10); //prints "10 A 12\n"
printf("%b\n", 10); // prints "%b\n"
我可以用printf打印十六进制或八进制数字。是否有格式标签打印为二进制或任意基数?
我正在运行gcc。
printf("%d %x %o\n", 10, 10, 10); //prints "10 A 12\n"
printf("%b\n", 10); // prints "%b\n"
当前回答
下面是我对unsigned int的处理方法
void printb(unsigned int v) {
unsigned int i, s = 1<<((sizeof(v)<<3)-1); // s = only most significant bit at 1
for (i = s; i; i>>=1) printf("%d", v & i || 0 );
}
其他回答
截至2022年2月3日,GNU C库已更新至2.35版。因此,现在支持%b以二进制格式输出。
的输出现在支持%b格式的printf系列函数 二进制整数,如ISO C2X草案中指定的,以及%B变体 采用ISO C2X草案建议的格式。
void DisplayBinary(unsigned int n)
{
int l = sizeof(n) * 8;
for (int i = l - 1 ; i >= 0; i--) {
printf("%x", (n & (1 << i)) >> i);
}
}
即使是支持%b的运行时库,它似乎也只适用于整数值。
如果您想打印二进制的浮点值,我写了一些代码,您可以在http://www.exploringbinary.com/converting-floating-point-numbers-to-binary-strings-in-c/上找到。
至于我,我为此编写了一些通用代码
#include<stdio.h>
void int2bin(int n, int* bin, int* bin_size, const int bits);
int main()
{
char ch;
ch = 'A';
int binary[32];
int binary_size = 0;
int2bin(1324, binary, &binary_size, 32);
for (int i = 0; i < 32; i++)
{
printf("%d ", binary[i]);
}
return 0;
}
void int2bin(int n, int* bin,int *bin_size,const int bits)
{
int i = 0;
int temp[64];
for (int j = 0; j < 64; j++)
{
temp[j] = 0;
}
for (int l = 0; l < bits; l++)
{
bin[l] = 0;
}
while (n > 0)
{
temp[i] = n % 2;
n = n / 2;
i++;
}
*bin_size = i;
//reverse modulus values
for (int k = 0; k < *bin_size; k++)
{
bin[bits-*bin_size+k] = temp[*bin_size - 1 - k];
}
}
void print_ulong_bin(const unsigned long * const var, int bits) {
int i;
#if defined(__LP64__) || defined(_LP64)
if( (bits > 64) || (bits <= 0) )
#else
if( (bits > 32) || (bits <= 0) )
#endif
return;
for(i = 0; i < bits; i++) {
printf("%lu", (*var >> (bits - 1 - i)) & 0x01);
}
}
应该工作-未经测试。