Can't edit anymore but a better (only slightly) and clearer version is
u32 length = (code <= 0x7F) + (code <= 0x07FF) + (code <= 0xFFFF);
u32 limit = (code <= 0x10FFFF);
u32 allowed = ((code < 0xD800) ||
(0xDFFF < code));
u32 valid = (limit && allowed);
return(-1 * !valid + valid * (4 - length));