例如,1, 2, 128, 256输出可以是(16位):
0000000000000001
0000000000000010
0000000010000000
0000000100000000
Run Code Online (Sandbox Code Playgroud)
我试过了
String.format("%16s", Integer.toBinaryString(1));
Run Code Online (Sandbox Code Playgroud)
它为左边填充放置空格:
` 1'
Run Code Online (Sandbox Code Playgroud)
如何将0s用于填充.我在Formatter中找不到它.还有另一种方法吗?
提前致谢.
PS 这篇文章描述了如何使用左0填充格式化整数,但它不适用于二进制表示.
有人可以澄清当一个整数被转换为shortC 时会发生什么吗?我正在使用Raspberry Pi,所以我知道a int是32位,因此short必须是16位.
假设我使用以下C代码作为示例:
int x = 0x1248642;
short sx = (short)x;
int y = sx;
Run Code Online (Sandbox Code Playgroud)
我知道这x会被截断,但有人可以解释一下究竟是怎么回事?轮班使用了吗?数字究竟是如何从32位截断到16位的?
可能重复:
是否有printf转换器以二进制格式打印?
这是我的计划
#include<stdio.h>
int main ()
{
int i,a=2;
i=~a;
printf("a=%d\ni=%d\n",a,i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是
a=2
i=-3
Run Code Online (Sandbox Code Playgroud)
我希望这个以二进制打印.%x,%o和%d是十六进制,八进制和十进制数,但是什么用于在printf中打印二进制文件?
我有一个int,我想存储为二进制字符串表示.如何才能做到这一点?
我想从命令行获取MAC地址,所以我把它作为字符串...如何将这个17字节的MAC字符串转换为"00:0d:3f:cd:02:5f"到C中的6字节MAC地址
我转换的无符号整数使用位运算符为二进制,和目前还整数&1,以检查是否比特是1或0,并且输出,然后通过1右移由2.然而的位被以错误的顺序返回到划分(反转),所以我想在开始之前反转整数中的位顺序.
有一个简单的方法吗?
示例:如果我给了unsigned int 10 = 1010
while (x not eq 0)
if (x & 1)
output a '1'
else
output a '0'
right shift x by 1
Run Code Online (Sandbox Code Playgroud)
这会返回0101这是不正确的...所以我想在运行循环之前反转最初的位顺序,但我不确定如何做到这一点?
在C中,为什么没有标准说明符以二进制格式打印数字,就像%b.当然,人们可以编写一些功能/黑客来做到这一点,但我想知道为什么这么简单的事情不是语言的标准部分.
背后有一些设计决定吗?因为对于十六进制有八进制%o和%x的格式说明符,所以八进制和十六进制比二进制表示更"重要".
因为在C/C++中经常会遇到按位运算符,我会想到将%b一个数字的二进制表示直接输入到变量中是有用的(输入十六进制数字的方式int i=0xf2)
注:像线程此 只讨论这样做的"如何"部分,而不是"为什么"
现在,我做的是这样的:
void print_bits(unsigned int x)
{
int i;
for(i=WORD_SIZE-1; i>=0; i--) {
(x & (1 << i)) ? putchar('1') : putchar('0');
}
printf("\n");
}
Run Code Online (Sandbox Code Playgroud)
另外,有一个独立于字大小的解决方案(在我的例子中当前设置为32)会很棒.
看看这个例子:
#include <stdio.h>
int main() {
int i= 16777217;
float f = 16777216.0;
float g = i;
if( i == f )
printf("eq\n");
else
printf("neq\n");
if( g == f )
printf("eq\n");
else
printf("neq\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
其中,在发布模式下使用Visual Studio 2010 C++(VS),gcc或g ++(4.9.2)具有输出
eq
eq
Run Code Online (Sandbox Code Playgroud)
这对我来说是合理的:在第一次比较期间,i隐式转换为浮点数,其中尾数中的有效位被截断.因此,两个i和f具有比较平等同位模式.在第二个中if,相同的转换适用但在定义和初始化时已经执行g.
但是,在调试模式下使用VS,结果是
neq
eq
Run Code Online (Sandbox Code Playgroud)
看来,第一次比较期间的隐式转换if(作为C和C++中通常的算术转换的一部分)并未应用.这是真的?是否存在VS机制,可以在比较浮点数和整数(转换为更高精度的int/float)时防止此类误报?根据MSDN VS C++遵循的标准.
我用这个函数检查了位表示.对于所有编译器,它产生
i = 00000001000000000000000000000001
f = 01001011100000000000000000000000
g = 01001011100000000000000000000000
Run Code Online (Sandbox Code Playgroud)
float.h在VS状态,#define FLT_MANT_DIG 24 …
c c++ type-conversion visual-studio-2010 implicit-conversion
可能重复:
是否有printf转换器以二进制格式打印?
还在学习C和我在想:
给定一个数字,是否可以执行以下操作?
char a = 5;
printf("binary representation of a = %b",a);
> 101
Run Code Online (Sandbox Code Playgroud)
或者我是否必须编写自己的方法来转换为二进制?