using namespace std;
#include<stdio.h>
#include <string.h>
int w = 8 * sizeof(int);
/* 2.78 中的函数*/
int divide_power1(int x, int k) {
int K = k & (x >> (w - 1)); //如果 x 为负, K 为 k;否则 K 为 0
x += (1 << K) - 1; //如果 K 为 0, x 不变;否则进行偏置
x >>= k;
return x;
}
int divide_power2(int x, int k) {
x >>= k;
return x;
}
int mul3div41(int x) {
x = (x << 1) + x;
return divide_power1(x, 2);
}
int mul3div42(int x) {
x = (x << 1) + x;
return divide_power2(x, 2);
}
int main() {
int o = 0x123456789, t = -o;
printf("%d %d\n", mul3div41(o),mul3div41(t));
printf("%d %d\n", mul3div42(o),mul3div42(t));
return 0;
}
加bias不加bias的区别