int fchar(unsigned char x, unsigned char n)
return ((x-n) & ~x & 0x7F) != 0
inf f(unsigned long x, unsigned char n)
return (fchar(x&0xFF, n) &
fchar(x>>8&0xFF, n) &
fchar(x>>16&0xFF, n) &
fchar(x>>24&0xFF, n) &
);
נכן כאשר לכל בייט מx מתקיים xi>n. אחרת carry בחיסור מסבך את זה.
תרגום נכון תמיד אבל טיפה קרוב יותר למקור:
inf f(unsigned long x, unsigned char n)
{
unsigned long n4 = n<<24+n<<16+n<<8+n; // if n=0x5c then n4 = 0x5c5c5c5c
return (0x7f7f7f7f & ~x & (x-n4) );
}
אני לא זוכר כבר את כל השטיקים של חיסור במשלים ל-, והcarry מסבך אותי נורא… אני אשאיר את זה למישהו אחר מכאן, בינתיים לפחות.