将 Java 代码翻译成 Python

Translating Java code to Python

我正在尝试将此 Java 代码翻译成 Python:

double grades = -32.33f;
System.out.println("grades: "+grades);
double radians = Math.toRadians(grades);
System.out.println("rad: "+radians);
long radiansUp8 = 0xFFFF_FFFFL & (long)(radias * 100_000_000);
System.out.println("rad: "+radiansUp8);
String hex = Long.toHexString(radiansUp8);
System.out.println("signed to hex: "+hex);

我已经这样做了:

import math

grades = -32.33
radians = math.radians(grades)
print radians
radians = radians * 100000000
print radians
hexValue = hex(int(radians))
print hexValue

但我没有得到相同的结果。 Java 代码工作正常,但在 Python 中不行。特别是这一行我不确定如何翻译成 Python,也许这就是问题所在:

long radiansUp8 = 0xFFFF_FFFFL & (long)(radianes * 100_000_000);

Java 代码的(正确)输出是:

grades: -32.33000183105469
rad: -0.5642649791276998
rad: 4238540799
signed to hex: fca2ffff

Python 代码的(不正确的)输出是:

grades: -32.33
radians: -0.56426494717
radians: -56426494.717
signed to hex: -0x35cfffe

该行到 Python 的翻译是:

radians = 0xffffffff & long(radians * 100000000)

这给出了(大致!)您期望的答案:

>>> 0xffffffff & long(math.radians(-32.33) * 100000000)
4238540802L

的作用是将弧度数乘以 100,000,000(得到 -56426494.71697667),将结果转换为 long 整数(-56426494L) 然后在 "bitwise and"0xffffffff 之间做一个 "bitwise and"(参见 https://wiki.python.org/moin/BitwiseOperators)。您当前的代码仅执行这三个步骤中的第一步。

按位和的简单示例:

>>> '{:04b}'.format(int('1010', 2) & (int('0111', 2)))
'0010'

对于每个二进制数字,仅当两个输入数字均为1时,输出数字为1