>>> static inline unsigned int constant_time_msb(unsigned int a) { >>> - *return 0 - (a >> (sizeof(a) * 8 - 1));* >>> + return (((unsigned)((int)(a) >> (sizeof(int) * 8 - 1)))); >>> } >> >> >> ... Both versions >> look reasonable to me (ignoring the hardcoded 8 - implying a char is 8 >> bits). > > Hardcoded 8 is not reference to char C type, but to units in which > sizeof(variable) is measured. For example when we say ILP32 or LP64, > what do we mean and what role does 8 play in the drama? Well, one can argue that language standard doesn't actually dictate the unit of sizeof(variable) to be 8-bit wide (only that it's *at least* 8, right?), but we do so to say live in an "ILP" world and 8 is ubiquitous.