#include <stdio.h>
#include <stdint.h>
uint8_t func(uint32_t num, uint8_t shl) {
return shl * (1 - ((num-(1<<shl)) >> 31));
}
uint8_t func0(uint32_t num, uint8_t shl)
{
if (num >= (1 << shl))
{
return shl;
}
else
{
return 0;
}
}
int main(void) {
int cnt = 0;
for (uint16_t num = 0 ; num != 256 ; num++) {
for (uint8_t s = 0 ; s != 8 ; s++) {
int a = func0(num, s);
int b = func(num, s);
if (a != b) {
printf("num=%d shl=%d comparison:%d func:%d\n", num
, s
, a
, b
); cnt++;
}
}
}
printf("Number of differences: %d\n", cnt
); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRpbnQuaD4KCnVpbnQ4X3QgZnVuYyh1aW50MzJfdCBudW0sIHVpbnQ4X3Qgc2hsKSB7CiAgICByZXR1cm4gc2hsICogKDEgLSAoKG51bS0oMTw8c2hsKSkgPj4gMzEpKTsKfSAKCnVpbnQ4X3QgZnVuYzAodWludDMyX3QgbnVtLCB1aW50OF90IHNobCkKewogICAgaWYgKG51bSA+PSAoMSA8PCBzaGwpKQogICAgewogICAgICAgIHJldHVybiBzaGw7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9Cn0KCmludCBtYWluKHZvaWQpIHsKCWludCBjbnQgPSAwOwoJZm9yICh1aW50MTZfdCBudW0gPSAwIDsgbnVtICE9IDI1NiA7IG51bSsrKSB7CgkgICAgZm9yICh1aW50OF90IHMgPSAwIDsgcyAhPSA4IDsgcysrKSB7CgkJICAgIGludCBhID0gZnVuYzAobnVtLCBzKTsKCQkgICAgaW50IGIgPSBmdW5jKG51bSwgcyk7CgkJICAgIGlmIChhICE9IGIpIHsKCQkgICAgCXByaW50ZigibnVtPSVkIHNobD0lZCBjb21wYXJpc29uOiVkIGZ1bmM6JWRcbiIsIG51bSwgcywgYSwgYik7CgkJICAgIAljbnQrKzsKCQkgICAgfQoJICAgIH0KCX0KCXByaW50ZigiTnVtYmVyIG9mIGRpZmZlcmVuY2VzOiAlZFxuIiwgY250KTsKCXJldHVybiAwOwp9Cg==