相关疑难解决方法(0)

如何在java中获得整数的0填充二进制表示?

例如,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填充格式化整数,但它不适用于二进制表示.

java binary string-formatting

113
推荐指数
7
解决办法
12万
查看次数

当int被强制转换为short并被截断时,新值是如何确定的?

有人可以澄清当一个整数被转换为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位的?

c casting truncate

36
推荐指数
5
解决办法
3万
查看次数

如何通过printf打印二进制数

可能重复:
是否有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中打印二进制文件?

c binary printf

35
推荐指数
2
解决办法
26万
查看次数

如何在C++中将int转换为二进制字符串表示形式

我有一个int,我想存储为二进制字符串表示.如何才能做到这一点?

c++ string binary g++

15
推荐指数
3
解决办法
4万
查看次数

如何将Mac字符串转换为C中的字节地址

我想从命令行获取MAC地址,所以我把它作为字符串...如何将这个17字节的MAC字符串转换为"00:0d:3f:cd:02:5f"到C中的6字节MAC地址

c

13
推荐指数
1
解决办法
2万
查看次数

C无符号整数的反转位

我转换的无符号整数使用位运算符为二进制,和目前还整数&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 binary int unsigned bit-manipulation

10
推荐指数
1
解决办法
4万
查看次数

C中的二进制表示

在C中,为什么没有标准说明符以二进制格式打印数字,就像%b.当然,人们可以编写一些功能/黑客来做到这一点,但我想知道为什么这么简单的事情不是语言的标准部分.

背后有一些设计决定吗?因为对于十六进制有八进制%o和%x的格式说明符,所以八进制和十六进制比二进制表示更"重要".

因为在C/C++中经常会遇到按位运算符,我会想到将%b一个数字的二进制表示直接输入到变量中是有用的(输入十六进制数字的方式int i=0xf2)

注:像线程 只讨论这样做的"如何"部分,而不是"为什么"

c binary printf

9
推荐指数
1
解决办法
3875
查看次数

有没有办法打印位而不使用C中的循环?

现在,我做的是这样的:

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)会很棒.

c bit-manipulation

9
推荐指数
1
解决办法
396
查看次数

Visual Studio调试与发布版本:比较int和float missmatch

看看这个例子:

#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隐式转换为浮点数,其中尾数中的有效位被截断.因此,两个if具有比较平等同位模式.在第二个中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

9
推荐指数
1
解决办法
215
查看次数

在C中显示数字的二进制表示?

可能重复:
是否有printf转换器以二进制格式打印?

还在学习C和我在想:

给定一个数字,是否可以执行以下操作?

char a = 5;
printf("binary representation of a = %b",a);
> 101
Run Code Online (Sandbox Code Playgroud)

或者我是否必须编写自己的方法来转换为二进制?

c binary printf representation

6
推荐指数
4
解决办法
11万
查看次数