((a >> 8) & 0x00ff) vs. (a >> 8)
-
klärt mich mal auf,
kann man bei folgender funktion auf die und-verknüpfung verzichten, da als parameter sowieso nur ein unsigned short übergeben wird und somit die bits (0xff00) nach dem shiften immer 0 sind, oder sollte das wegen dem inline lieber stehen bleiben?
inline unsigned char HiByte(const unsigned short a) { return ((unsigned char) ((a >> 8) & 0x00ff)); }thanx
-
Wenn du nicht portabel sein willst und davon ausgehst, dass unsigned char 8 bit und unsigned short 16 bit groß ist (das sag ich nur so als Absicherung dazu), dann ist das ANDen mit 0xFF überflüssig, da Rechtsschieben bei vorzeichenlosen Typen von links Nullen nachrücken läßt und damit das High-Byte nach dem Schieben ohnehin den Wert 0 hat.
-
return (unsigned char) (a >> (sizeof(a) - sizeof(char))*CHAR_BIT)Sollte richtig portabel sein.
-
auf das "& 0xff" kannst du schon deshalb verzichten, weil du ja anschließend ohnehin nach unsigned char castest.
daß die funktion inline ist spielt keine rolle. wenn du ein int übergeben würdest, würde der compiler das erst nach unsigned short casten.