gpt4 book ai didi

gcc - gcc(或任何其他编译器)是否为 (n&1==1) 更改 (n%2==1)?

转载 作者:行者123 更新时间:2023-12-04 18:05:18 29 4
gpt4 key购买 nike

要测试一个数字是奇数还是偶数,
据我了解,测试使用

(n%2==1)

是一样的
(n&1==1)

我假设第一个测试更快(如果我错了,请纠正我),但是有没有编译器识别出这一点并“纠正”它?这对性能有什么影响吗?

最佳答案

void main()
{
int n = 5;
int i = n & 1;
}
call __main
movl $5, -4(%rbp)
movl -4(%rbp), %eax
andl $1, %eax
movl %eax, -8(%rbp)
addq $48, %rsp
popq %rbp
ret

void main()
{
int n = 5;
int i = n % 2;
}
call __main
movl $5, -4(%rbp)
movl -4(%rbp), %eax
cltd
shrl $31, %edx
addl %edx, %eax
andl $1, %eax
subl %edx, %eax
movl %eax, -8(%rbp)
addq $48, %rsp
popq %rbp
ret

使用 -S -O0 尝试使用 gcc.exe (GCC) 4.9.2
所以它接缝 & 1检查奇偶校验略好。

关于gcc - gcc(或任何其他编译器)是否为 (n&1==1) 更改 (n%2==1)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30227125/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com