Designing function f(f(n)) == -n

前端 未结 30 2822
清酒与你
清酒与你 2020-12-02 03:32

A question I got on my last interview:

Design a function f, such that:

f(f(n)) == -n

Where n<

30条回答
  •  生来不讨喜
    2020-12-02 03:55

    x86 asm (AT&T style):

    ; input %edi
    ; output %eax
    ; clobbered regs: %ecx, %edx
    f:
        testl   %edi, %edi
        je  .zero
    
        movl    %edi, %eax
        movl    $1, %ecx
        movl    %edi, %edx
        andl    $1, %eax
        addl    %eax, %eax
        subl    %eax, %ecx
        xorl    %eax, %eax
        testl   %edi, %edi
        setg    %al
        shrl    $31, %edx
        subl    %edx, %eax
        imull   %ecx, %eax
        subl    %eax, %edi
        movl    %edi, %eax
        imull   %ecx, %eax
    .zero:
        xorl    %eax, %eax
        ret
    

    Code checked, all possible 32bit integers passed, error with -2147483647 (underflow).

提交回复
热议问题