2016-04-16 7 views
0

CとPythonでアセンブリプログラムを実装します。私はCとPythonの両方でそれを実装私はそれについて何の説明がありませんしながら、アセンブリプログラムの一部を理解しようとしている

;x is stored at 8(%ebp) 

    movl 8(%ebp), %edx 
    movl $0, %eax 
    testl %edx, %edx 
    je .L7 

.L10: 
    xorl %edx, %eax 
    shrl %edx 
    jne .L10 

.L7: 
    andl $1, %eax 

unsigned fun_a(unsigned x) { 
    int val = 0; 
    while (x != 0) { 
     val = val^x; 
     x = x >> 1; 
    } 
    return val && 1; 
} 

def fun_a(x): 
    val = 0 
    while x != 0: 
     val = val^x 
     x = x >> 1 
    return val & 1 

しかし、彼らは異なる結果を生成することが判明:私のC/Pythonプログラムと間違って何

//C 
fun_a(0) = 0 
fun_a(1) = 1 
fun_a(2) = 1 
fun_a(3) = 1 
fun_a(4) = 1 
fun_a(5) = 1 
fun_a(6) = 1 
fun_a(7) = 1 
fun_a(8) = 1 
fun_a(9) = 1 

#Python 
fun_a(0) = 0 
fun_a(1) = 1 
fun_a(2) = 1 
fun_a(3) = 0 
fun_a(4) = 1 
fun_a(5) = 0 
fun_a(6) = 0 
fun_a(7) = 1 
fun_a(8) = 1 
fun_a(9) = 0 

を?

+1

最後の行が異なります。 – thebjorn

+1

最も近いCマニュアルに行き、 '&&'と '&'の違いを調べてください。 – lurker

+0

は、Cコードで '& 'を1つだけ使用する必要があります。&&は、while(文)とwhile(文)のためのif(文)ループに対してのみ使用されます。 – SSpoke

答えて

0

あなたは値& & 1を返します。これは論理的なものです。 Pythonでは、戻り値&はビット単位です。

関連する問題