Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Java代码转换为Python_Java_Python_Hex - Fatal编程技术网

将Java代码转换为Python

将Java代码转换为Python,java,python,hex,Java,Python,Hex,我正在尝试将此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.printl

我正在尝试将此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

的作用是将弧度数乘以100000000(给出
-56426494.71697667
),将结果转换为
长的
整数(
-56426494L
),然后在该整数和
0xffffffff
之间执行“按位and”(参见示例)。您当前的代码只执行这三个步骤中的第一个

有关按位and的作用的简单示例:

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

对于每个二进制数字,仅当两个输入数字都是
1
时,输出数字才是
1

谢谢,我如何获得十六进制有符号数字?当你回答它时,给我签名为hex:0x0的
@Tichodroma或
int
,但这使它“看起来”更接近JavaMy Python 3.4没有内置的
long
@Tichodroma no;是的,但是(基于
打印
)OP正在使用2。x@jonrsharpe调用
hex
我有一个错误,并将参数强制转换为int以避免错误我在十六进制输出中得到一个
0x0
为什么我的问题有-2???