gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:52:14 26 4
gpt4 key购买 nike

我想在不使用比较运算符的情况下检查一个数字是否为负数。我正在尝试检查最重要的位。我正在做以下事情:

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

我原以为输出是 1。但是我得到 -1。如何解释这种行为?

最佳答案

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

来自 MSDN :

If the first operand is an int or long, the right-shift is an arithmetic shift (high-order empty bits are set to the sign bit). If the first operand is of type uint or ulong, the right-shift is a logical shift (high-order bits are zero-filled).

如果你这样做:

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

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

关于c# - 用于检查数字负性的右移运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22593141/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com