右操作数为负时按位移位运算符的行为 在C++中,如果使用 > >代码>和 < p> >右操作数是否定的,我将回答java部分(不能为C语言发言,但可能是相同的)。

右操作数为负时按位移位运算符的行为 在C++中,如果使用 > >代码>和 < p> >右操作数是否定的,我将回答java部分(不能为C语言发言,但可能是相同的)。,java,c#,c++,bitwise-operators,bit-shift,Java,C#,C++,Bitwise Operators,Bit Shift,C的换档操纵器>和# 根据C#规范第7.9节- 对于预定义运算符,要移位的位数计算如下: 当x的类型为int或uint时,移位计数由计数的低位5位给出。换句话说,移位计数是根据count&0x1F 当x的类型为long或ulong时,移位计数由计数的低位6位给出。换句话说,移位计数是根据count&0x3F 这意味着移位的符号被忽略。事实上,正如Jon Skeet在注释规范中指出的那样,由于规范定义的位掩蔽,以下代码将在i==31之后换行 for (int i = 0; i < 40;

C的换档操纵器
>
#
根据C#规范第7.9节-

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

  • x
    的类型为
    int
    uint
    时,移位计数由
    计数的低位5位给出。换句话说,移位计数是根据
    count&0x1F
  • x
    的类型为
    long
    ulong
    时,移位计数由
    计数的低位6位给出。换句话说,移位计数是根据
    count&0x3F
这意味着移位的符号被忽略。事实上,正如Jon Skeet在注释规范中指出的那样,由于规范定义的位掩蔽,以下代码将在
i==31
之后换行

for (int i = 0; i < 40; i++)
{
    Console.WriteLine(int.MaxValue >> i);
}
for(int i=0;i<40;i++)
{
Console.WriteLine(int.MaxValue>>i);
}

它使用位。如果你把-3取为位,就像
。。。。1101
。点是很多的
1111111111
右移将
0011
移到
0000
,因为在那之后它什么都做不了。我刚才在读Eric Lippert的一篇文章#8提到了轮班操作员。
[Warning] left shift count is negative [enabled by default]
warning c4293: '<<' : shift count negative or too big, undefined behavior
class left_shift_nagative
{
    public static void main(String args[])
    {
        int a=3;
        System.out.println(a<<-3);
        System.out.println(a>>-3);
    }
}
1610612736
0
namespace left_shift_nagative
{
    class Program
    {
        static void Main(string[] args)
        {
            int s = 3;
            Console.WriteLine(s << -3);
            Console.WriteLine(s >> -3); 
        }
    }
}
1610612736
0
for (int i = 0; i < 40; i++)
{
    Console.WriteLine(int.MaxValue >> i);
}