长类型的最大HEX值
本文关键字:HEX 类型 | 更新日期: 2023-09-27 18:19:58
我已经将Java代码移植到C#。你能解释一下为什么我在下面的行中出现编译时错误吗(我使用VS 2008):
private long l = 0xffffffffffffffffL; // 16 'f' got here
无法将源类型ulong转换为目标类型long
这里我需要与原始Java代码相同的值。
Java不介意在这种特殊情况下常量是否溢出——您给出的值实际上是-1。
在C#中实现相同效果的最简单方法是:
private long l = -1;
如果你想保留16 fs,你可以使用:
private long l = unchecked((long) 0xffffffffffffffffUL);
如果实际上想要有符号长的最大值,则应该使用:
// Java
private long l = Long.MAX_VALUE;
// C#
private long l = long.MaxValue;
假设您不担心负值,您可以尝试使用unsigned long
:
private ulong l = 0xffffffffffffffffL;
在Java中,l
的实际值将是-1
,因为它会溢出2^63 - 1
的最大值,所以您可以将常量替换为-1
。
0xffffffffffffffff
大于带符号的long所能表示的值。
你可以插入一个演员阵容:
private long l = unchecked( (long)0xffffffffffffffffL);
由于C#使用二的补码,0xffffffffffffffff
表示-1
:
private long l = -1;
或者将变量声明为无符号,如果您想表示位模式,这可能是最干净的选择:
private ulong l = 0xffffffffffffffffL;
private ulong l = ulong.MaxValue;
烧录长的最大值为:
private long l = 0x7fffffffffffffffL;
但最好写成long.MaxValue
。
您可以这样做:
private long l = long.MaxValue;
但正如mdm所指出的,你可能真的想要一个ulong。
private ulong l = ulong.MaxValue;