黑马程序员技术交流社区
标题:
c#中的位移问题
[打印本页]
作者:
王毅
时间:
2013-3-7 23:56
标题:
c#中的位移问题
本帖最后由 王毅 于 2013-3-15 20:00 编辑
在C#运算优先级中有位移的运算符号<< >> ,这两个运算符主要是用来做什么的
作者:
吕振
时间:
2013-3-8 00:07
二进制计数以单字节为例,比如0x55=0b01010101如果将该数值左移1位,就变成了 0b10101010(最右边这个0是移空了以后补的),这个数值是0xaa从数学上看,左移1位等于乘以2,右移1位等于除以2,然后再取整,移位溢出的丢弃。
作者:
史金阳
时间:
2013-3-8 00:14
貌似很复杂哦 美女 本着复杂问题简单化原则
就是数据转换成二进制的左右移动;右移左补0,左移右补0,后面多出来的部分去掉。
用乘除法去理解位移也可以:
左位移:相当于乘
左移1位相当于乘2,左移2位相当于乘4,左移3位相当于乘8,左移4位相当于乘16...类推
右位移:相当于除
右移1位相当于除2,右移2位相当于除4,右移3位相当于除8,右移4位相当于除16...类推
作者:
王毅
时间:
2013-3-8 00:32
这两个运算符主要是用于做什么的
作者:
董华阳
时间:
2013-3-8 19:20
左移运算符 (<<) 将第一个操作数向左 移动第二个操作数指定的位数。第二个操作数的类型必须是 int。
备注:
如果第一个操作数是 int 或 uint(32 位数),则移位数由第二个操作数的低 5 位给 出。
如果第一个操作数 是 long 或 ulong(64 位数),则移位数由第二个操作数的低 6 位给 出。
第一个操作数的高 序位被放弃,低序空位用 0 填充。移位操作从不导致溢出。
右移运算符 (>>) 将第一个操作数向右 移动第二个操作数所指定的位数。
备注:
如果第一个操作数为 int 或 uint(32 位数),则移位数由第二个操作数的低五位给出(第二个操作数 & 0x1f)。
如果第一个操作数为 long 或 ulong(64 位数),则移位数由第二个操作数的 低六位给出(第二个操作数 & 0x3f)。
如果第一个操作数为 int 或 long,则右移位是算术移位(高序空位 设置为符号位)。如果第一个操作数为 uint 或 ulong 类型,则右移位是逻辑移位(高位填充 0)。
用户定义的类型可重载 >> 运算符;第一个操作数的类型必须为用户定义的类型,第二个操作数的类型必须为 int。有关更多信息,请参见 operator。重 载二元运算符时,也会隐式重载相应的赋值运算符(如果有)。
用户定义的类型可重载 << 运算符(请参见 operator); 第一个操作数的类型必须为用户定义的类型,第二个操作数的类型必须为 int。重载二元运算符时, 也会隐式重载相应的赋值运算符(如果有)。
作者:
孔健
时间:
2013-3-9 11:09
王毅 发表于 2013-3-8 00:32
这两个运算符主要是用于做什么的
位移比乘除速度快.对效率要求高,而且满足2的幂次方的乘除运算,可以采用位移的方式进行。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2