带有 << 的整数运算

发布于 2024-09-29 20:23:50 字数 222 浏览 5 评论 0 原文

我最近看到了一些代码示例,其中包含类似的内容,

1 << 20 

虽然我知道这个运算符可以用于整数,但我不确定它的作用,并且我尝试对其进行的每次谷歌搜索都会返回有关 cout cout 的内容。 < 但没有关于整数运算的内容。有人能告诉我这个运算符对整数做什么吗?

I've recently bee seen a number of code examples with stuff like

1 << 20 

although I knew this operator could be used on integers I'm not sure what it does and every google search I try doing on it returns stuff about cout << but nothing on the integer operations. Could someone tell me what this operator does to integers?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

阳光下的泡沫是彩色的 2024-10-06 20:23:50

<<按位左移运算符

C++03 [5.8/2]

E1的值<< E2 是 E1(解释为位模式)左移的 E2 位位置;空出的位用零填充。如果 E1 具有无符号类型,则结果值是 E1 乘以 2 的 E2 次方,如果 E1 具有 unsigned long 类型,则减少模 ULONG_MAX+1,否则为 UINT_MAX+1。 [注:常量 ULONG_MAX 和 UINT_MAX 在头文件中定义)。 ]

此外,在表达式 E1 << E2 如果 E1 具有带符号类型和负值,则行为未定义。

这意味着类似 -1 << 4调用UB。

<< is Bit wise left shift operator

C++03 [5.8/2]

The value of E1 << E2 is E1 (interpreted as a bit pattern) left-shifted E2 bit positions; vacated bits are zero-filled. If E1 has an unsigned type, the value of the result is E1 multiplied by the quantity 2 raised to the power E2, reduced modulo ULONG_MAX+1 if E1 has type unsigned long, UINT_MAX+1 otherwise. [Note: the constants ULONG_MAXand UINT_MAX are defined in the header ). ]

In addition in the expression E1 << E2 if E1 has a signed type and negative value the behaviour is undefined.

That means something like -1 << 4 invokes UB.

看春风乍起 2024-10-06 20:23:50

位移位:http://en.wikipedia.org/wiki/Bitwise_shift#Bit_shifts

向左移动 1 20 位,或者...

1 << 20 ==(二进制)1 0000 0000 0000 0000 0000 == 2^20 == 1048576

Bit shifting: http://en.wikipedia.org/wiki/Bitwise_shift#Bit_shifts

You are shifting 1 20 bits left, or...

1 << 20 == (binary) 1 0000 0000 0000 0000 0000 == 2^20 == 1048576

听你说爱我 2024-10-06 20:23:50

使用<<和>>因为 io 实际上比它们的“原始”目的(位移)更新。

<代码>1 << 1 表示取二进制 1(也只是普通的 1)并将所有内容沿着 1 向左移动,得到二进制 10 或 2。它将它加倍。 <代码>1 << 2 变为 4,1 << 3 变为 8,依此类推。 (从比 1 更复杂的数字开始仍然有效,只需将所有内容移至左侧即可。)这种工作被某些人称为“位旋转”。它可以节省某些类型的算术运算的时间。

The use of << and >> for io is actually newer than their "original" purpose, bit shifting.

1 << 1 means to take the binary 1 (which is also just plain 1) and move everything along 1 to the left, resulting in a binary 10 or 2. It doubles it. 1 << 2 becomes 4, 1 << 3 becomes 8, and so on. (Starting with a more complicated number than 1 still works, again you just shift everything over to the left.) This kind of work is called "bit twiddling" by some. It can save time for certain kinds of arithmetical operations.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文