Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于检查数字负性的右移运算符_C#_Bit Manipulation - Fatal编程技术网

C# 用于检查数字负性的右移运算符

C# 用于检查数字负性的右移运算符,c#,bit-manipulation,C#,Bit Manipulation,我试图在不使用比较运算符的情况下检查数字是否为负数。我试图检查最重要的部分。我正在做以下工作: int x = -5; Console.WriteLine(x >> 31); 我希望输出是1。但是我得到了-1。是什么解释了这种行为?这是因为int上的运算符>表现为算术移位:被“推入”的位取符号位的值(在您的情况下为0或1,1)。因此得到的结果数字是0xFFFFFFFF,即-1 发件人: 如果第一个操作数为int或long,则右移位为 算术移位(将高阶空位设置为符号位)。如果 第一个

我试图在不使用比较运算符的情况下检查数字是否为负数。我试图检查最重要的部分。我正在做以下工作:

int x = -5;
Console.WriteLine(x >> 31);

我希望输出是
1
。但是我得到了
-1
。是什么解释了这种行为?

这是因为
int
上的运算符
>
表现为算术移位:被“推入”的位取符号位的值(在您的情况下为0或1,1)。因此得到的结果数字是
0xFFFFFFFF
,即
-1

发件人:

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

如果您这样做:

Console.WriteLine((uint)x >> 31);

这是一个逻辑移位,高位用
0
填充,输出是您期望的:
1

这必须是重复的。让我去找一个。。编辑:实际上,找不到好的复制品。但这个问题的答案应该会有所帮助:右移位运算符将其第一个操作数右移其第二个操作数(MDSN)指定的位数。它涉及到bits,我认为我没有最好的解释给你,但我相信这篇文章可以对你很有帮助-。请不要在问题标题中包含关于所用语言的信息,除非没有它就没有意义。标签就是为了这个目的。