今天自学 没看懂 >

时间:2021-03-15 04:18:27
MSDN的解释没看懂

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

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

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

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

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

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

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

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

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

红色的地方都没看懂  哪位有爱心的哥 给我说说 详细点

8 个解决方案

#1


自己顶。。顶自己的肺

#2


该回复于2010-08-17 09:24:47被版主删除

#3


对整型运算对象按位进行逻辑运算。按位进行逻辑运算的意义是:依次取被运算对象的每个位,进行逻辑运算,每个位的逻辑运算结果是结果值的每个位。
int e=6<<3;
Console.WriteLine("e={0}",e);
//6的二进制是00000110,左移三位后等于00101000,即48
long lg = 1;
Console.WriteLine("0x{0:x}", lg << 33);
输出:
0x200000000

#4


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

不可以



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

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

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

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

uint和ulong移位时,不考虑符号(本身无符号,它的最高位也代表数字)

#5


工作中很少用到这个位移
建议你过一段时间再看
再过一段时间再看
书读百遍,其义自现

#6


左移右移操作。
很简单。任何数字在计算机中都是二进制保存。比如
1用一个字节byte表示。就是
0000 0001
如果左移,就是把1往左移动一个成为
0000 0010
左右移就是相对二进制说的。
没很复杂,只要注意一点,有符号的左移后,原位置补充为1.无符号数左移后原位置填充0.右移都相同。

#7


学习一下

#8


左移右移操作, 相当于乘除2

#1


自己顶。。顶自己的肺

#2


该回复于2010-08-17 09:24:47被版主删除

#3


对整型运算对象按位进行逻辑运算。按位进行逻辑运算的意义是:依次取被运算对象的每个位,进行逻辑运算,每个位的逻辑运算结果是结果值的每个位。
int e=6<<3;
Console.WriteLine("e={0}",e);
//6的二进制是00000110,左移三位后等于00101000,即48
long lg = 1;
Console.WriteLine("0x{0:x}", lg << 33);
输出:
0x200000000

#4


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

不可以



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

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

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

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

uint和ulong移位时,不考虑符号(本身无符号,它的最高位也代表数字)

#5


工作中很少用到这个位移
建议你过一段时间再看
再过一段时间再看
书读百遍,其义自现

#6


左移右移操作。
很简单。任何数字在计算机中都是二进制保存。比如
1用一个字节byte表示。就是
0000 0001
如果左移,就是把1往左移动一个成为
0000 0010
左右移就是相对二进制说的。
没很复杂,只要注意一点,有符号的左移后,原位置补充为1.无符号数左移后原位置填充0.右移都相同。

#7


学习一下

#8


左移右移操作, 相当于乘除2