int到二进制代码解释C++
int to binary code explanation C++
我很难理解下面的代码,它用于将整数转换为二进制。有人能更准确地解释吗?尤其是"0"+
for (;d>0;d--){
buffer[index++] = '0'+ (x & 1);
x >>= 1;
}
首先,"index"初始化为0。但是"d"的定义是什么?我们有一个名为"buffer"的字符数组,"x"是要转换的整数。现在,在"x&1"中,"&"是位AND运算符。如果我们操作"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。
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为偶数,它将"0"存储在缓冲区[index]中,否则将存储"1",直到x不为0。
这是一个循环,从包含某个值的变量开始,然后创建一个由1和0组成的字符串。
'0' + (x & 1)
取数字0的字符'0'
,然后将x的最右边的位的值加到该字符上,该位的值要么为0,要么为1。如果比特为零,则相加的结果为'0'
,如果比特为1,则相加结果为'1'
。
然后将该字符放入缓冲区,变量x
右移一位,将下一个二进制数字移到最右边。
然后重复添加。
结果是,您得到了一个以0和1作为字符数字的文本字符串。
你确定这是正确的源代码吗?在我看来,文本字符串结果需要反转才能正确表示二进制值。
buffer[index++] = '0'+ (x & 1);
这一行经过一个可能是char数组的部分,将每个字符设置为字符"0"加上一个等于0或1的值"0"+0是"0"0"+1是"1"。原因x&1将是0或1,这是因为该代码本质上是在检查x中的低位是否开启。这之所以有效,是因为下面的行将x右移1,然后将x设置为该值,这基本上是敲除低位,并将所有其他位移1。通过这种方式,x被遍历,并且每个比特都被检查。
不过,请注意。看来它将被写为BACKWARDS!
在ASCII中,0具有ASCII值48,而1具有ASCII值49。IOW如果你写putchar(48(;你在屏幕上看到一个0
缓冲区可能是一个char二维数组,已分配48或49,因为x&1的计算结果为1或0。
假设您有一个值x=225,并希望将其转换为包含0和1的的可读文本
225在二进制中看起来像这样
1110 0001
当你做1110 0001 & 0x1
时,你屏蔽掉最后剩下的1个是0000 0001
因此将1加至48并将总和转换为字符是1
接下来,比特向右移动一步x>>=1
0111 0000
用0x1掩蔽的是0000 0000
所以把0加到48并把和转换成一个字符就变成了0
依此类推,直到x为0
- 请解释"函数1(p1,p2,p3);"的输出
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 被解释为低级别const的const对象的地址
- 计算每个节点的树高,帮助我解释这个代码解决方案
- MSVC将仅移动结构参数解释为指针
- 内联程序集printf将整数解释为地址
- 有人能解释一下为什么下界是这样工作的吗C++的
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 我是c ++的新手,你能解释一下在这种情况下的指针吗
- 有人能为我解释一下C++代码吗
- 你能解释一下什么运行时错误是如何解决它的吗?
- 请解释字谜的代码,我看不懂计数器数组,每个值已经是0
- 有人可以向我解释为什么控制台输出 0 吗?
- 有人可以解释一下这段代码如何能够反转字符串
- 在 C++ 中解释多维向量的语句时感到困惑
- 解释一下 for (char c : str) 的作用?
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串
- 隐式重新解释引用时强制转换,没有警告/错误
- 有人可以在 c++ 中解释数组的这种输入
- 有人可以解释一下这个矩阵幂函数是如何工作的吗?