C++ int到二进制代码解释C++;

C++ int到二进制代码解释C++;,c++,C++,我正在努力处理下面的代码,它用于将整数转换为二进制。有人能更清楚地解释一下吗?尤其是“0”+ for (;d>0;d--){ buffer[index++] = '0'+ (x & 1); x >>= 1; } 这是一个循环,它从一个包含一些值的变量开始,然后创建一个由1和0组成的字符串 '0'+(x&1)取数字0的字符'0',然后将x的最右边位的值添加到该字符中,该位的值为0或1。如果位为零,则加法结果为'0',如果位为1,则加法结果为'1' 然后

我正在努力处理下面的代码,它用于将整数转换为二进制。有人能更清楚地解释一下吗?尤其是“0”+

for (;d>0;d--){
    buffer[index++] = '0'+ (x & 1); 
    x >>= 1;
}

这是一个循环,它从一个包含一些值的变量开始,然后创建一个由1和0组成的字符串

'0'+(x&1)
取数字0的字符
'0'
,然后将x的最右边位的值添加到该字符中,该位的值为0或1。如果位为零,则加法结果为
'0'
,如果位为1,则加法结果为
'1'

然后将该字符放入缓冲区,变量
x
右移一位,以将下一个二进制数字移动到最右边的位置

然后重复添加

结果是,您有一个0和1作为字符数字的文本字符串

您确定这是正确的源代码吗?在我看来,需要反转文本字符串结果才能正确表示二进制值

buffer[index++] = '0'+ (x & 1); 
这一行大概是一个字符数组,将每个字符设置为字符“0”加上一个等于0或1的值0'+0是“0”0'+1是“1”。x&1将为0或1的原因是因为此代码实际上是在检查x中的低位是否为on。这样做的原因是,下面的行将x右移1,然后将x设置为该值,这基本上是去掉低位,将所有其他位移1。通过这种方式,x被遍历,并且每个位都被检查

但请注意。看起来它将被向后写

在ASCII中,0的ASCII值为48,1的ASCII值为49。如果你写putchar(48);您会在屏幕上看到一个0

缓冲区可能是一个字符二维数组 48或49,因为x&1的计算结果为1或0

假设你有一个x=225的值,并希望将其转换为包含0和1的可读文本

225在二进制中看起来像这样

1110 0001

当您执行
1110 0001&0x1
操作时,您会掩盖剩下的最后一个1是
0000 0001

所以把1和48相加,把和转换成一个字符就是1

接下来,位右移一步x>>=1

01110000

用0x1屏蔽的值为
0000 0000

因此,将0和48相加,并将总和转换为一个字符,即为0

依此类推,直到x为0,首先,“索引”被初始化为0。但“d”的定义是什么? 我们有一个名为“buffer”的字符数组,“x”是要转换的整数。 现在,在“x&1”中,“&”是。如果我们操作“x&n”,它会将最后n个最低有效位更改为

1 & 1 = 1,
1 & 0 = 0,
0 & 1 = 0,
0 & 0 = 0.
如果我们执行4和1

100
001
---
000
然后,它返回0

如果我们执行9&1

1001
0001
----
0001
然后,它返回1

基本上,如果x是偶数,x&1返回0,如果x是奇数,则返回1。 现在,在这之后,这个0或1被添加到“0”(ascii 48),这是- 如果x是偶数,“0”+(x&1)保持为“0”,否则它将变为“1”,因为x&1返回1,“0”+1是“1”。 之后在“x>>=1”中,“>>”是,这相当于x=x/2或x/=2。但是如果我们考虑整数,那就没有什么差别了。 考虑x=12,即二进制中的1100。< /P>
if we execute x >>= 1, then x becomes 6, if shifts away last 0 of 1100, becomes 110.
again if we execute x >>= 1, then x becomes 3, if shifts away last 0 of 110, becomes 11.
again if we execute x >>= 1, then x becomes 1, if shifts away last 1 of 11, becomes 1.
again if we execute x >>= 1, then x becomes 0, if shifts away last 1 of 1, becomes 0.

最后,如果x为偶数,则在缓冲区[index]中存储“0”,否则存储“1”,直到x不是0。

数字具有连续字符代码。不过,这可能与两个部分是分开的、命名良好的函数,可能是一个显式转换有关。这是什么意思?如果
'0'
有一些整数值,
'1'
有这个值加上一。同样适用于
'1'
'2'
等。的可能重复项但为什么以“0”开头不会(x&1)返回1或零?或者这仅仅是为了使其成为一个字符串?@inControl,赋值的思想是利用ANSI字符序列将零或一的二进制值转换为“0”或“1”的字符数字(在UNICODE中实际上也是一样的,因为较低的256是ANSI字符集)其中,“0”到“9”的字符数字按从0x30到0x39的升序排列。在创建每个字符数字时,将其放入数组元素中,然后增加数组索引以转到文本字符串的下一个数组元素。