[英]C++ what does >> do
>>在这种情况下做什么?
int n = 500;
unsigned int max = n>>4;
cout << max;
打印出31 。
500到达31后它做了什么?
有点移位!
原始二进制500:
111110100
转移4
000011111是31!
Original: 111110100
1st Shift:011111010
2nd Shift:001111101
3rd Shift:000111110
4th Shift:000011111 which equals 31.
这相当于将整数除以16。
500/16 = 31
500/2 ^ 4 = 31
一些事实从这里拉出来: http : //www.cs.umd.edu/class/spring2003/cmsc311/Notes/BitOp/bitshift.html (因为从我头脑中咆哮导致漫无目的,这是非生产性的......这些人说得很多比我更清洁)
使用<<向左移位使得0从最低有效端(右侧)移位,并使位从最高端(左侧)脱落。
使用>>向右移动会导致0从最高端(左侧)移位,并且如果数字是无符号的,则会导致位从最低端(右侧)脱落。
Bitshifting不会改变被移位变量的值。 而是使用位移结果创建临时值。
500比特右移4次。
x >> y
数学上表示x / 2^y
。
因此500 / 2^4
等于500 / 16
。 在整数除法中,结果为31
。
它使用整数除法将其除以500乘以16。
>>
是一个右移运算符,它将n
的二进制表示的位向右移动4次。 这相当于将n
除以2 4倍,即除以2 ^ 4 = 16。 这是整数除法,因此小数部分被截断。
它将500位向右移位4位,将最右边的位向下移动。
500 = 111110100(二进制)
111110100 >> 4 = 11111 = 31
二进制500是[1 1111 0100]
(4 + 16 + 32 + 64 + 128 + 256)
向右移动4次,丢失最低4位,导致:
[1 1111]
这是1 + 2 + 4 + 8 + 16 = 31
你也可以用Hex检查它:
500
(十进制)是0x1F4
(十六进制)。
然后转移到右边4位,或一个半字节 :
0x1F
== 31
(十进制)。
111110100是二进制500。 将位向右移动,您将保留11111(二进制为31)。
>>和<<运营商正在转变运营商。
http://www-numi.fnal.gov/offline_software/srt_public_context/WebDocs/Companion/cxx_crib/shift.html
当然,他们可能会超载,只是为了让你更加困惑!
C ++有很好的类来动画在位级别上发生的事情
#include <bitset>
#include <iostream>
int main() {
std::bitset<16> s(500);
for(int i = 0; i < 4; i++) {
std::cout << s << std::endl;
s >>= 1;
}
std::cout << s
<< " (dec " << s.to_ulong() << ")"
<< std::endl;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.