gpt4 book ai didi

c++ - 为什么 (a % 256) 与 (a & 0xFF) 不同?

转载 作者:IT老高 更新时间:2023-10-28 11:31:41 34 4
gpt4 key购买 nike

我总是假设在做 (a % 256) 时优化器自然会使用高效的按位运算,就好像我写了 (a & 0xFF) .

在编译器资源管理器 gcc-6.2 (-O3) 上测试时:

// Type your code here, or load an example.
int mod(int num) {
return num % 256;
}

mod(int):
mov edx, edi
sar edx, 31
shr edx, 24
lea eax, [rdi+rdx]
movzx eax, al
sub eax, edx
ret

当尝试其他代码时:

// Type your code here, or load an example.
int mod(int num) {
return num & 0xFF;
}

mod(int):
movzx eax, dil
ret

似乎我完全错过了一些东西。有什么想法吗?

最佳答案

不一样。试试 num = -79,你会从这两个操作中得到不同的结果。 (-79) % 256 = -79,而 (-79) & 0xff 是一些正数。

使用unsigned int,操作是一样的,代码也很可能是一样的。

PS-有人评论了

They shouldn't be the same, a % b is defined as a - b * floor (a / b).

这不是它在 C、C++、Objective-C 中的定义方式(即问题中的代码可以编译的所有语言)。

关于c++ - 为什么 (a % 256) 与 (a & 0xFF) 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40483266/

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