Java (byte) ((localIntBuffer[srcIdx + col] >> 8) & 0xFF)
Java (byte) ((localIntBuffer[srcIdx + col] >> 8) & 0xFF)
我讨厌自己问这个问题,但我找不到任何解决办法。
(byte) ((localIntBuffer[srcIdx + col] >> 8) & 0xFF)
这段代码是用Java写的,我想学习Delphi中的equals,这段代码是什么意思?
>>
运算符是有符号右移。
&
运算符是按位与。
(byte)
是对 byte
的转换。
[]
是数组索引运算符。
在Delphi中会这样写:
(localIntBuffer[srcIdx + col] shr 8) and $ff
不需要在 Delphi 中进行强制转换,因为所有整数类型都是赋值兼容的,并且 and $ff
确保值在正确的范围内。
有符号移位和无符号移位之间的区别在这里并不重要,因为您是从 32 位有符号整数中挑选出第 8-15 位。好吧,我假设 localIntBuffer
是 int
的数组。最好是你这样说,而不是让我们去猜测。认为代码本身就足够了是一个非常常见的新手错误。类型的知识也总是至关重要的。
正如@TLama 正确指出的那样,查阅文档是值得的:
- Java 运算符:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/opsummary.html
- Delphi 运算符:http://docwiki.embarcadero.com/RADStudio/en/Expressions_%28Delphi%29#Operators
另一种写法是使用 SysUtils
中的 LongRec
来选择所需的字节:
LongRec(localIntBuffer[srcIdx + col]).Bytes[1]
我讨厌自己问这个问题,但我找不到任何解决办法。
(byte) ((localIntBuffer[srcIdx + col] >> 8) & 0xFF)
这段代码是用Java写的,我想学习Delphi中的equals,这段代码是什么意思?
>>
运算符是有符号右移。&
运算符是按位与。(byte)
是对byte
的转换。[]
是数组索引运算符。
在Delphi中会这样写:
(localIntBuffer[srcIdx + col] shr 8) and $ff
不需要在 Delphi 中进行强制转换,因为所有整数类型都是赋值兼容的,并且 and $ff
确保值在正确的范围内。
有符号移位和无符号移位之间的区别在这里并不重要,因为您是从 32 位有符号整数中挑选出第 8-15 位。好吧,我假设 localIntBuffer
是 int
的数组。最好是你这样说,而不是让我们去猜测。认为代码本身就足够了是一个非常常见的新手错误。类型的知识也总是至关重要的。
正如@TLama 正确指出的那样,查阅文档是值得的:
- Java 运算符:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/opsummary.html
- Delphi 运算符:http://docwiki.embarcadero.com/RADStudio/en/Expressions_%28Delphi%29#Operators
另一种写法是使用 SysUtils
中的 LongRec
来选择所需的字节:
LongRec(localIntBuffer[srcIdx + col]).Bytes[1]