A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王毅 中级黑马   /  2013-3-7 23:56  /  1506 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王毅 于 2013-3-15 20:00 编辑

在C#运算优先级中有位移的运算符号<<    >>   ,这两个运算符主要是用来做什么的

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

5 个回复

倒序浏览
二进制计数以单字节为例,比如0x55=0b01010101如果将该数值左移1位,就变成了 0b10101010(最右边这个0是移空了以后补的),这个数值是0xaa从数学上看,左移1位等于乘以2,右移1位等于除以2,然后再取整,移位溢出的丢弃。

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
貌似很复杂哦 美女 本着复杂问题简单化原则
就是数据转换成二进制的左右移动;右移左补0,左移右补0,后面多出来的部分去掉。

用乘除法去理解位移也可以:

     左位移:相当于乘

             左移1位相当于乘2,左移2位相当于乘4,左移3位相当于乘8,左移4位相当于乘16...类推

     右位移:相当于除

             右移1位相当于除2,右移2位相当于除4,右移3位相当于除8,右移4位相当于除16...类推

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
这两个运算符主要是用于做什么的   
回复 使用道具 举报
左移运算符 (<<) 将第一个操作数向左 移动第二个操作数指定的位数。第二个操作数的类型必须是 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。重载二元运算符时, 也会隐式重载相应的赋值运算符(如果有)。

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
王毅 发表于 2013-3-8 00:32
这两个运算符主要是用于做什么的

位移比乘除速度快.对效率要求高,而且满足2的幂次方的乘除运算,可以采用位移的方式进行。

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马