Table of Contents

@related: C byte java algo bit.fr bit.en limit

ENDIANS

#define IS_BIG_ENDIAN (*(uint16_t *)"\0\xff" < 0x100)

bit shifting

/// emulate's java's unsigned shift : '>>>'
#define MACRO_BITSHIFT_TYPE(type, value, offset)                             \
  (((offset) > 0) ?                                                     \
  ((((value) >> 1)                                                   \
    & (~(((type)1) << ((sizeof(value) << 3) - 1)))) >> ((offset) - 1)) \
   : ((offset) == 0 ) ? (value) :  ((value)<<(offset))            \
   )

#define BITSHIFT(value, offset)                      \
 MACRO_BITSHIFT_TYPE(typeof(value), value, offset)

power of 2

#define ISPOW2(x)  (x && !(x & (x-1)))
/// O(1)
#define ISPOW2(x) (((-x)&(x))==(x))
template <typename T> inline bool ISPOW2(const T &a)  { return (a) > 0 && ((a) & ((a)-1)) == 0;  }
/// O(32)
#include <stdio.h>
int isPower2(unsigned int n) {
  if ( ! n ) return n; /* n=0 in register */
  for(;;(n>>=1)) { if ( n & 0x1 ) { return ( !  (n>>=1) ); } }
}
int main (int argc, char** argv) {
 int r;
 unsigned int i=0;
 if ( argc >1 )  i = atoi(argv[1]);
 r = isPower2( i );
 printf("# %d is %sa power of 2\n", i , ( r ) ? "" : "not " );
 return r;
}

Endian: 4 char to uint32 :

  u32<<=8;
  u32|=( buff[i+3] &0xFF);
  u32<<=8;
  u32|=( buff[i+2] &0xFF);
  u32<<=8;
  u32|=( buff[i+1] &0xFF);
  u32<<=8;
  u32|=( buff[i+0] &0xFF);

MorE

i.huffpost.com_gadgets_slideshows_246711_slide_246711_1426175_free.jpg