我想知道当通过2运算执行整数模数时,典型编译器的程序集减少是什么:
const char* integer_string = "300"; // avoid compiler optimization
int i = atoi(integer_string);
int b = i % 2; // the line in question
我想编译器可以把它变成一个逐位操作来检查最后一位(1s位置),但是它会这样做吗?
答案 0 :(得分:8)
这个问题只在特定的编译器,平台,优化选项等环境中才有意义。
我的编译器(gcc 4.7.2
上的x86_64
)会在启用-O3
优化时执行此操作:
andl $1, %esi