我试图执行赋值:“在不使用sizeof of ()函数的情况下,在无符号整数数据类型中查找位数。”
我的设计是将整数转换为位,然后计数它们。ex:10 is 1010和5 is 101
将整数转换为位表示显示了如下所示:
do
{
Vec.push_back( x & 1 )
}
while ( x >>= 1 );我不想只复制粘贴的东西。当我使用F-10时,我看到了(x & 1)在做什么,但我不知道它是名字,也不知道它是如何工作的(比较什么?)我也知道>=哪个“大于或等于”,但是x >>= 1是什么?
注意:标记的副本是JavaScript而不是C++。
发布于 2016-08-12 16:27:48
这些是按位运算符(参考文献)。
x & 1产生的值要么是1,要么是0,这取决于x中最不重要的位:如果最后一个位是1,则x & 1的结果是1;否则,就是0。这是一个按位操作。
x >>= 1的意思是“将x设置为自身,向右移动一位”。表达式计算为移位后x的新值。
注意:对于无符号类型的值,移位后最重要位的值为零。对于有符号类型的值,最重要的位是在作为符号扩展的一部分转移之前从值的符号位中复制的,因此如果x是有符号类型,并且初始值为负值,循环将永远不会结束。
发布于 2018-03-07 03:36:35
x & 1等同于x % 2。
x >> 1等价于x / 2
所以,这些东西基本上是除以二的结果和剩余的。
发布于 2018-02-23 14:10:40
除了“大百叶窗”的答案之外,我认为一个例子可能会有所帮助。为了更好的理解,我只使用8位。
x & 1产生的值要么是1,要么是0,这取决于x中最不重要的位:如果最后一个位是1,则x & 1的结果是1;否则,就是0。这是一个按位操作。
这是因为1将以位表示为00000001。只有最后一个位被设置为1。让我们假设x是185,它将以bits表示为10111001。如果您在x上使用1按位和操作,这将得到如下结果:
00000001
10111001
--------
00000001操作结果的前七位将是操作后的0,在本例中不携带任何信息(请参见逻辑与操作)。因为无论操作数x的前七位是什么,在操作之后,它们都是0。但是操作数1的最后一部分是1,它将显示操作数的最后一部分是0还是1。因此,在本例中,按位和操作的结果将是1,因为我们的最后一个x是1。如果最后一位是0,那么结果也将是0,表示操作数x的最后一位是0。
00000001
10111000
--------
00000000
x >>= 1的意思是“将x设置为自身,向右移动一位”。表达式计算为移位后x的新值。
让我们从上面挑一个例子。对于x >>= 1,这将是:
10111001
--------
01011100对于左移位x <<= 1,它应该是:
10111001
--------
01110010请注意用户在换班时的注意事项。
https://stackoverflow.com/questions/38922606
复制相似问题