公式,我想解決這個樣子的在C:Unsatisfiable公式?也許錯誤的語法?
#define foo(w,x,y) ((((w)*(x)*(y)+31) & ~31)/8)
WORD w,x,y,z;
y = 24;
if((foo(w,x,y) * z) == -1)
printf("yeah!");
我把它改寫以下列方式來z3py:
from z3 import *
w= BitVec('w',16)
x= BitVec('x',16)
z= BitVec('z',16)
y= BitVecVal(24,16)
solve((UDiv((w*x*y+31) & ~31, 8)) * z == 0xffffffff)
有什麼建議?
PS:請注意,試圖以這樣的形式解決公式:
solve((UDiv((w*x*y+31), 8)) * z == 0xffffffff)
是可能的,所以我不能相信的是逐位操作導致這個公式不可滿足。
呵呵ofc,C程序沒有顯示任何東西,因爲大部分變量都是未定義的。我把這個C代碼放在公式中(WORD == unsigned short)來顯示使用的數據類型。 – user3305379