1. 程式人生 > >左移運算的小題目

左移運算的小題目

class 匯編 cnblogs ret void 數據 sig 取數 計算機

int main(void)
{
    unsigned char a = 0xa5;
    unsigned char b;
    
    b = ~a >> 1+2+3;
    
    return 0;
}

通過查看匯編的過程發現了自己的理解的錯誤,計算機是把整個EAX寄存器全部翻轉的。最後再截取數據

   0x00000000004004d6 <+0>:    push   %rbp
   0x00000000004004d7 <+1>:    mov    %rsp,%rbp
   0x00000000004004da <+4>:    movb   $0xa5,-0x2(%rbp)
   0x00000000004004de <+
8>: movzbl -0x2(%rbp),%eax    ;eax = 0x000000a5 0x00000000004004e2 <+12>: not %eax          ;eax = 0xffffff5a => 0x00000000004004e4 <+14>: sar $0x6,%eax       ;eax = 0xfffffffd 0x00000000004004e7 <+17>: mov %al,-0x1(%rbp)     ;al = 0xfd 0x00000000004004ea <+20>: mov $0x0,%eax 0x00000000004004ef <+25>: pop
%rbp 0x00000000004004f0 <+26>: retq

  先是計算not,再計算sar.

  在不清楚順序的時候最好使用括弧,切記

左移運算的小題目