当前位置:  开发笔记 > 编程语言 > 正文

了解班次操作员

如何解决《了解班次操作员》经验,为你挑选了2个好方法。



1> Marc Gravell..:

<<是左移算子; 这将获取值的二进制表示,并将所有位"n"位置向左移动("mod"除外,参见"1"),用零回填.

>>是右移的运营商; 这几乎完全相反(向右移动),除了有符号值(即那些可以是负数),它用负值反向填充1,否则为0.

1:

移位运算符基本上是"修改"数据的宽度.int是32位,因此左移33(在Int32中)与左移1完全相同.您不会得到全零.A long是64位,因此33的左移给出不同的答案(原始时间为2 ^ 33).

2:

每个左移(在数据宽度内)与x2相同(对于整数) - 因此<< 4是x2x2x2x2 = x16.

这是简单的二进制:

0000000001 = 1

<<去

0000000010 = 2

<<去

0000000100 = 4

<<去

0000001000 = 8



2> Jon Skeet..:

只是为了扩展Marc的答案(Marc,随意将其包括在你的内容中,我将删除这个答案)这在规范的第7.8节中有详细说明:


下面列出了预定义的移位运算符.

向左移:

int operator <<(int x,int count);

uint operator <<(uint x,int count);

long运算符<<(long x,int count);

ulong operator <<(ulong x,int count);

<<运算符将x向左移位如下所述计算的位数.

x的结果类型范围之外的高位被丢弃,剩余的位向左移位,低位空位位置被设置为零.

右移:

int operator >>(int x,int count);

uint operator >>(uint x,int count);

long operator >>(long x,int count);

ulong operator >>(ulong x,int count);

>>运算符将x向右移位如下所述计算的位数.

当x的类型为int或long时,x的低位被丢弃,其余位向右移位,如果x为非负,则高位空位位置设置为0,如果x为非负值则设置为1是否定的.

当x是uint或ulong类型时,x的低位被丢弃,其余位被右移,高位空位被设置为零.

对于预定义的运算符,要移位的位数计算如下:

当x的类型是int或uint时,移位计数由计数的低5位给出.换句话说,移位计数是从count&0x1F计算的.

当x的类型为long或ulong时,移位计数由计数的低6位给出.换句话说,移位计数是从count&0x3F计算的.

如果得到的移位计数为零,则移位运算符只返回x的值.


推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有