编程论坛
注册
登录
编程论坛
→
C语言论坛
移位的速度比除法快吗
llsh77
发布于 2021-08-21 19:49, 1528 次点击
今天在看书的时候,看到书上说:temp>>1 比 temp/2快。但是编译器不会对其进行优化吗,这两个应该是一样的吧?
3 回复
#2
自由而无用
2021-08-21 20:51
//online parser:
https://www.bccn.net/run/
int system(const char *command);
#define GCC_O1_FLAG
int main(int argc, char *argv[])
{
int param = 0x80ABCDEF;
param >>= 1;
param /= 2;
#ifndef GCC_O1_FLAG
system("gcc -S *.c -o v.s");
#else
system("gcc
-O1
-S *.c -o v.s");
#endif
system("cat v.s");
return 0;
}
#3
吹水佬
2021-08-21 22:23
以下是引用
llsh77
在2021-8-21 19:49:03的发言:
今天在看书的时候,看到书上说:temp>>1 比 temp/2快。但是编译器不会对其进行优化吗,这两个应该是一样的吧?
可能是编译器的问题
通常来说,无符号的temp>>1与temp/2一样,做逻辑右移就可以。有符号的temp>>1与temp/2可能不一样,temp>>1做算术右移,temp/2可能还要先考虑符号位做逻辑右移,运算后再做算术右移。
[此贴子已经被作者于2021-8-21 22:31编辑过]
#4
llsh77
2021-08-22 19:22
回复 2楼 自由而无用
感谢回复的例程,学到很多
#5
llsh77
2021-08-22 19:23
回复 3楼 吹水佬
谢谢,确实对于有符号数来说这两个有着明显不同。
1