Tag: 位操作

在C ++中循环移位(旋转)操作的最佳实践

左和右移运算符(<<和>>)已经在C ++中可用。 但是,我无法find如何执行循环移位或旋转操作。 如何执行“向左旋转”和“向右旋转”? 在这里旋转两次 Initial –> 1000 0011 0100 0010 应该导致: Final –> 1010 0000 1101 0000 一个例子会有帮助。 (编者注:如果旋转计数为零,或者编译为不止一个旋转机器指令,许多常见的expression式旋转的方法都会受到未定义的行为的影响,这个问题的答案应该logging最佳实践。

什么是“2的补充”?

我参加了计算机系统课程,并且一直在挣扎 ,部分与Two的补充 。 我想了解它,但是我读过的所有东西都没有为我带来这幅画。 我已阅读维基百科文章和其他各种文章,包括我的课本 。 因此,我想开始这个社区维基的post来定义什么是补码是什么,如何使用它,以及它如何影响数字操作(如从签名到无符号,反之亦然),按位操作和位移操作。 我所希望的是一个清晰简洁的定义 ,程序员很容易理解。

什么是位移(位移)操作符,它们是如何工作的?

我一直在尝试在业余时间学习C语言,而其他语言(C#,Java等)也有相同的概念(通常是相同的操作符)。 我想知道的是,在核心层面,什么是位移(<<,>>,>>>),它能帮助解决什么问题,什么问题在这个弯曲中潜伏着? 换句话说,一个绝对的初学者的指南,其所有的善良位移。

你如何设置,清除和切换一个位?

如何在C / C ++中设置,清除和切换?

如何计算一个32位整数的设置位数?

表示数字7的8位看起来像这样: 00000111 三位被设置。 什么algorithm来确定一个32位整数的设置位数?

在C 中最有效的位反转算法(从MSB-> LSB到LSB-> MSB)

什么是最好的算法来实现以下内容: 0010 0000 => 0000 0100 转换是从MSB-> LSB到LSB-> MSB。 所有位必须颠倒; 也就是说,这不是端到端的交换。

设置的最低有效位的位置

我正在寻找一种有效的方法来确定最低有效位的位置设置为一个整数,例如对于0x0FF0它将是4。 一个简单的实现是这样的: unsigned GetLowestBitPos(unsigned value) { assert(value != 0); // handled separately unsigned pos = 0; while (!(value & 1)) { value >>= 1; ++pos; } return pos; } 任何想法如何挤出一些周期呢? (注:这个问题是为了享受这样的事情的人,而不是让人们告诉我xyzoptimization是邪恶的。) 感谢大家的想法! 我也学到了其他一些东西。 凉!

这些JavaScript按位运算符是做什么的?

x <<= y (x = x << y) x >>= y (x = x >> y) x >>>= y (x = x >>> y) x &= y (x = x & y) x ^= y (x = x ^ y) x |= y (x = x | y) 这些不同的运营商是做什么的?

使用按位或0来放置一个数字

我的同事偶然发现了一种使用按位或者: var a = 13.6 | 0; //a == 13 我们正在谈论这个问题,想知道几件事情。 它是如何工作的? 我们的理论是使用这样的一个操作符把这个数字转换成一个整数,从而去掉小数部分 与Math.floor相比,它有什么优势吗? 也许这快一点? (双关不打算) 它有什么缺点吗? 也许这在某些情况下不起作用? 明确是一个明显的问题,因为我们必须弄清楚,好吧,我正在写这个问题。 谢谢。