C#中逻辑右移的代码是什么?

问题描述 投票:0回答:3

我正在尝试将具有逻辑右移(

>>>
)(>>>和>>之间的差异)的Java代码翻译为C#

Java代码是

 return hash >>> 24 ^ hash & 0xFFFFFF;

C# 被标记

>>>
为语法错误。

如何解决这个问题?

更新1 人们建议在 C# 中使用

>>
,但这并没有解决问题。

System.out.println("hash 1 !!! = " + (-986417464>>>24));

是197

但是

Console.WriteLine("hash 1 !!! = " + (-986417464 >> 24));

是-59

谢谢!

c# bit-shift
3个回答
17
投票

Java 需要引入

>>>
,因为它唯一的无符号类型是
char
,其运算是以整数完成的。

另一方面,C# 具有无符号类型,它们执行右移而不进行符号扩展:

uint h = (uint)hash;
return h >> 24 ^ h & 0xFFFFFF;

0
投票

对于 C# 你可以使用

>>

如果左侧操作数的类型为

uint
ulong
,则右移运算符执行逻辑移位:高阶空位位置始终设置为零。

来自文档


0
投票

C# 11 支持逻辑(“无符号”)右移运算符 >>>。

© www.soinside.com 2019 - 2024. All rights reserved.