C++左移右移操作符研究
来源:互联网 发布:程序员能做到多少岁 编辑:程序博客网 时间:2024/06/05 05:12
- 首先是正常的
int m = 100;
m <<= 1;
cout << m;
Result:200
实际上左移X位等于乘以2的X次方。
- 如果右移的时候除不通怎么办?自己好好地画一个二进制位试试就知道了,实际上是不存在除不通的情况的。
0010 0000 >> 1 = 0001 0000 // 32 / 2 = 16
0010 0001 >> 1 = 0001 0000 // 33 / 2 = 16
表现出来的结果是去尾的。
- 标志位什么的怎么处理?如果是有标志位的数据类型,标志位会移位吗?试试就知道了。
void main()
{
int m = -1;
int n = -1;
m >>= 1;
n <<= 1;
cout << m << endl << n << endl;
}
Result:-1-2
好奇怪,左移成功了,但是右移甚至都没有变化。这是怎么个回事?-- 负数的存储方式是补码存储。
-1 = 11111111 11111111 11111111 11111111
右移保留符号位(注意!!!),左移填零,自己手动一下就知道为什么出现这两种奇怪的结果了。
--- 实际上负数的左右移位本来就是不应该出现的,第一补码难以推测,第二右移的时候是保留符号位还是填零将由编译器决定!- C++左移右移操作符研究
- C语言运算符研究
- C++库研究笔记——赋值操作符operator=的正确重载方式(三个准则)
- C++库研究笔记——操作符重载实现类型转换&这样做的意义
- C++库研究笔记——赋值操作符operator=的正确重载方式(2)
- c++重载操作符研究之 operator ->()
- x264list操作代码研究
- JAVA file操作研究
- c++(位操作符)
- c语言操作符
- C位移操作符
- C操作符练习
- C#is操作符
- C#as操作符
- c#new操作符
- C语言#,##操作符
- C操作符优先级
- [C]位操作符
- POJ 2116
- POJ 2136
- POJ 2160 BOX
- POJ 2190 ISBN
- HDU 4278
- C++左移右移操作符研究
- C++的类型转换符:static_cast、dy…
- 虚妄的奇迹,血泪的现实——记Fate&n…
- 统计页码数字问题
- HDU 2050 折线分割平面
- 宏定义应用
- 保留小数点后n位
- 随机数
- C++ 程序不一定从 main 处开始执行