C++做什么做什么

Mar*_*lor 3 c++ integer

>>在这种情况下做什么?

int n = 500;
unsigned int max = n>>4;
cout << max;
Run Code Online (Sandbox Code Playgroud)

打印出31.

500到达31后它做了什么?

Cal*_*ain 9

有点移位!

原始二进制500:
111110100

移位4
000011111即31!

Original: 111110100
1st Shift:011111010
2nd Shift:001111101
3rd Shift:000111110
4th Shift:000011111 which equals 31.
Run Code Online (Sandbox Code Playgroud)

这相当于将整数除以16.

500/16 = 31 500/2
^ 4 = 31

一些事实从这里拉出来:http://www.cs.umd.edu/class/spring2003/cmsc311/Notes/BitOp/bitshift.html(因为从我头脑中咆哮导致漫无目的,这是非生产性的......这些人说得很多比我更清洁)

使用<<向左移位使得0从最低端(右侧)移位,并使位从最高端(左侧)脱落.

使用>>向右移位会导致0从最高端(左侧)移位,并且如果数字是无符号的,则会导致位从最低端(右侧)脱落.

Bitshifting不会改变被移位变量的值.而是使用位移结果创建临时值.