今天自学 没看懂 <<和>>

wenjunsu 2010-08-16 07:29:45
MSDN的解释没看懂

右移运算符 (>>) 将第一个操作数向右移动第二个操作数所指定的位数。//第二个操作数是小数也可以?

如果第一个操作数为 int 或 uint(32 位数),则移位数由第二个操作数的低五位给出(第二个操作数 & 0x1f)

如果第一个操作数为 long 或 ulong(64 位数),则移位数由第二个操作数的低六位给出(第二个操作数 & 0x3f)。

如果第一个操作数为 int 或 long,则右移位是算术移位(高序空位设置为符号位)。如果第一个操作数为 uint 或 ulong 类型,则右移位是逻辑移位(高位填充 0)。

*************************************************************************

左移运算符 (<<) 将第一个操作数向左移动第二个操作数指定的位数。第二个操作数的类型必须是 int

如果第一个操作数是 int 或 uint(32 位数),则移位数由第二个操作数的低 5 位给出

如果第一个操作数是 long 或 ulong(64 位数),则移位数由第二个操作数的低 6 位给出

第一个操作数的高序位被放弃,低序空位用 0 填充。移位操作从不导致溢出。

红色的地方都没看懂 哪位有爱心的哥 给我说说 详细点
...全文
154 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Peter200694013 2010-08-16
  • 打赏
  • 举报
回复
左移右移操作, 相当于乘除2
l_pillar 2010-08-16
  • 打赏
  • 举报
回复
学习一下
兔子-顾问 2010-08-16
  • 打赏
  • 举报
回复
左移右移操作。
很简单。任何数字在计算机中都是二进制保存。比如
1用一个字节byte表示。就是
0000 0001
如果左移,就是把1往左移动一个成为
0000 0010
左右移就是相对二进制说的。
没很复杂,只要注意一点,有符号的左移后,原位置补充为1.无符号数左移后原位置填充0.右移都相同。
zhu_chuan_hang 2010-08-16
  • 打赏
  • 举报
回复
工作中很少用到这个位移
建议你过一段时间再看
再过一段时间再看
书读百遍,其义自现
jointan 2010-08-16
  • 打赏
  • 举报
回复
右移运算符 (>>) 将第一个操作数向右移动第二个操作数所指定的位数。//第二个操作数是小数也可以?

不可以



对于int(32位),最多只能执行>>31,低五位,就是如果int>>35 ,那么取35的低五位执行

即:x>>35 等效于x>>(35 & 0x1f) ,等价于除以32的余数

int64,和int62类似,最多只能执行>>63,等价于除64的余数

int和int64移位时,作为符号的最高位保留,移位后,数字的符号不变

uint和ulong移位时,不考虑符号(本身无符号,它的最高位也代表数字)
wuyq11 2010-08-16
  • 打赏
  • 举报
回复
对整型运算对象按位进行逻辑运算。按位进行逻辑运算的意义是:依次取被运算对象的每个位,进行逻辑运算,每个位的逻辑运算结果是结果值的每个位。
int e=6<<3;
Console.WriteLine("e={0}",e);
//6的二进制是00000110,左移三位后等于00101000,即48
long lg = 1;
Console.WriteLine("0x{0:x}", lg << 33);
输出:
0x200000000
wenjunsu 2010-08-16
  • 打赏
  • 举报
回复
自己顶。。顶自己的肺

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧