>>650
とりあえず、32bit長整数値の2引数a,bに対して
これらの積を64bit整数値の戻り値とする関数m(a,b)

int64 m(int32 a, int32 b) {
int s = 0;
for (int i = 0; i < 32; i++) {
//aのiビット目をpへ抽出
int p = (a >> i) & 1;
for (int j = 0; j < 32; j++) {
//bのjビット目をqへ抽出
int q = (b >> j) & 1;
//pとqの論理積をsのi+jビット目に加算
s += (p & q) << (i + j);
}
}
return s;
}