int nlz(unsigned k){
union {
unsigned asInt[2];
double asDouble;
};
int n;
asDouble = (double)k + 0.5;
n = 1054 - (asInt[LE] >> 20); // little endianなら1,big endianなら0
return n;
}

これがうまく理解できません><
優しく解説してくれるエロい人はいませんか?