Differences

This shows you the differences between two versions of the page.

Link to this comparison view

bit [2015/06/03 22:20]
bit [2022/04/16 12:22] (current)
Line 1: Line 1:
 +@related: [[C]] [[byte]] [[java]] [[algo]] [[bit.fr]] [[bit.en]] [[limit]]
 +
 +  * http://www-graphics.stanford.edu/~seander/bithacks.html
 +  * http://publications.gbdirect.co.uk/c_book/chapter6/bitfields.html
 +
 +
 +==== ENDIANS ====
 +
 +  #define IS_BIG_ENDIAN (*(uint16_t *)"\0\xff" < 0x100)
 +
 +  * http://msdn.microsoft.com/en-us/library/ms819743.aspx
 +  * http://stackoverflow.com/questions/2100331/c-macro-definition-to-determine-big-endian-or-little-endian-machine
 +
 +
 +==== bit shifting ====
 +
 +<code>
 +/// 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)
 +</code>
 +
 +
 +==== power of 2 ====
 +
 +  * http://www.catch22.net/tuts/c-c-tricks
 +
 +  #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 : 
 +
 +<code>
 +  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);
 +</code>
 +
 +
 +==== MorE ====
 +
 +{{http://i.huffpost.com/gadgets/slideshows/246711/slide_246711_1426175_free.jpg}}
 +
  
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki