看到楼主为了这个移位运算的问题如此纠结,只好替楼主去收集点资料了
想必楼主很忙,没有时间去看这些基础的,理论上的东西,
基础是靠自己打的,没有谁可以一夜之间让你有了基础,大牛们是不喜欢跟没有
基础的交流什么编程问题的,我想这一点应该是很多朋友们的共识吧!
好了,少数废话,多干实事!(声明:以下资料大多来源于百度搜索)
移位是一个二元运算符,用来将一个二进制数中的每一位全部都向一个方向移动指定位,溢出的部分将被舍弃,而空缺的部分填入一定的值。在类C语言中,左移使用两个小于符号"<<"表示,右移使用两个大于符号">>"表示。
位移位运算是将数据看成二进制数,对其
进行向左或向右移动若干位的运算。位移位运算符分为左移和右移两种,均为双目运算符。
第一运算对象是移位对 象,第二个运算对象是所移的二进制位数。
左移 就是: 丢弃最高位,0补最低位运算符是<<
a<<2; //a值不变
右移的概念和左移相反,就是往右边挪动若干位,运算符是>>
a>>2; //a值不变
右移对符号位的处理和左移不同,对于有符号整数来说,比如int类型,右移会保持符号位不变
例如:
int i = 0x80000000;
i = i >> 1;
//i的值不会变成0x40000000,而会变成0xc0000000
就是说,符号位向右移动 后,正数的话补0,负数补1,也就是汇编语言中的算术右移.同样当移动的位数超过类型的长度时,会取余数,然后移动余数个位.
负数10100110 >>5(假设字长为8位),则得到的是 11111101
//============================================================================
以上这些只是一些摘录,希望楼主还是自己找些相关的书籍或资料深入的学习一下,我想你只要不是
问一些基础概念方面的问题,会有很多朋友愿意与你共同探讨的!
打扰了!