Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.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
Python 为什么z3方程失败了?_Python_Z3_Z3py - Fatal编程技术网

Python 为什么z3方程失败了?

Python 为什么z3方程失败了?,python,z3,z3py,Python,Z3,Z3py,我需要解这个代码(C中的代码) 这是我的python脚本 from z3 import * len_input_serial = BitVec("serial_len",64) solve(LShR(LShR(0xAAAAAAAAAAAAAAABL * len_input_serial,64),1) + len_input_serial - 3 * LShR(LShR(0xAAAAAAAAAAAAAAABL * len_input_serial,64),1) == 14) 然而,这给了我[se

我需要解这个代码(C中的代码)

这是我的python脚本

from z3 import *
len_input_serial = BitVec("serial_len",64)
solve(LShR(LShR(0xAAAAAAAAAAAAAAABL * len_input_serial,64),1) + len_input_serial - 3 * LShR(LShR(0xAAAAAAAAAAAAAAABL * len_input_serial,64),1) == 14)
然而,这给了我
[serial\u len=14]

我知道解决方案应该在
[42,38,40]
左右,那么这里出了什么问题

这个表达式:

(0xAAAAAAAAAAAAAAABLL * len_input_serial >> 64) >> 1
始终等于
0
。如果将64位量右移64位,则得到0。(请注意,您使用的是
LShr
,它将其输入视为无符号量。)

因此,整个过程简化为求解
len\u input\u serial==14
,这就是Z3产生的答案


请注意,在Python中编写长整数(即0x123L等)时,将获得无限精度。(见此处:)。在C语言中,您很可能得到64位整数。因此,您的Z3代码实际上是正确的;是Python在这里使用了更高的精度,因此造成了混乱。

您的Python代码使用
a…ABL
而不是
a…ABL
,这是故意的吗?我想这没关系。。我试着将len_input_serial设置为40,然后用python运行代码,我得到了14,这是正确的数字。什么是“solve?”你是在尝试为
len_input_serial
找到一个值,以便
if
语句的测试结果为true?不,我需要计算false的值,我知道是40,38,42
(0xAAAAAAAAAAAAAAABLL * len_input_serial >> 64) >> 1