首页 > 代码库 > 左移运算的小题目
左移运算的小题目
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.
在不清楚顺序的时候最好使用括弧,切记
左移运算的小题目
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。