璁$畻緇濆鍊?nbsp; int abs( int x ) { int y ; y = x >> 31 ; return (x^y)-y ;//or: (x+y)^y }
絎﹀彿鍑芥暟錛歴ign(x) = -1, x<0; 0, x == 0 ; 1, x > 0 int sign(int x) { return (x>>31) | (unsigned(-x))>>31 ;//x=-2^31鏃跺け璐?^涓哄箓) }
涓夊兼瘮杈冿細cmp(x,y) = -1, x<y; 0, x==y; 1, x > y int cmp( int x, int y ) { return (x>y)-(x-y) ; }
doz=x-y, x>=y; 0, x<y int doz(int x, int y ) { int d ; d = x-y ; return d & ((~(d^((x^y)&(d^x))))>>31) ; }
int max(int x, int y ) { int m ; m = (x-y)>>31 ; return y & m | x & ~m ; }
涓嶄嬌鐢ㄧ涓夋柟浜ゆ崲x,y: 1.x ^= y ; y ^= x ; x ^= y ; 2.x = x+y ; y = x-y ; x = x-y ; 3.x = x-y ; y = y+x ; x = y-x ; 4.x = y-x ; x = y-x ; x = x+y ;
鍙屽間氦鎹?x = a, x==b; b, x==a//甯歌緙栫爜涓簒 = x==a ? b :a ; 1.x = a+b-x ; 2.x = a^b^x ;
涓嬭垗鍏ュ埌2鐨刱嬈℃柟鐨勫嶆暟: 1.x & ((-1)<<k) 2.(((unsigned)x)>>k)<<k 涓婅垗鍏ワ細 1. t = (1<<k)-1 ; x = (x+t)&~t ; 2.t = (-1)<<k ; x = (x-t-1)&t ;
浣嶈鏁?緇熻1浣嶇殑鏁伴噺錛?nbsp; 1. int pop(unsigned x) { x = x-((x>>1)&0x55555555) ; x = (x&0x33333333) + ((x>>2) & 0x33333333 ) ; x = (x+(x>>4)) & 0x0f0f0f0f ; x = x + (x>>8) ; x = x + (x>>16) ; return x & 0x0000003f ; } 2. int pop(unsigned x) { static char table[256] = { 0,1,1,2, 1,2,2,3, ...., 6,7,7,8 } ; return table[x&0xff]+table[(x>>8)&0xff]+table[(x>>16)&0xff]+table[(x>>24)] ; }
濂囧伓鎬ц綆? x = x ^ ( x>>1 ) ; x = x ^ ( x>>2 ) ; x = x ^ ( x>>4 ) ; x = x ^ ( x>>8 ) ; x = x ^ ( x>>16 ) ; 緇撴灉涓綅浜巟鏈浣庝綅錛屽鏃犵鍙穢,緇撴灉鐨勭i浣嶆槸鍘熸暟絎琲浣嶅埌鏈宸︿晶浣嶇殑濂囧伓鎬?nbsp;
閫掑浣嶅弽杞悗鐨勬暟錛?nbsp; unsigned inc_r(unsigned x) { unsigned m = 0x80000000 ; x ^= m ; if( (int)x >= 0 ) do { m >>= 1 ; x ^= m ; } while( x < m ) ; return x ; }
娣烽変綅錛?nbsp; abcd efgh ijkl mnop ABCD EFGH IJKL MNOP->aAbB cCdD eEfF gGhH iIjJ kKlL mMnN oOpP unsigned ps(unsigned x) { unsigned t ; t = (x ^ (x>>8)) & 0x0000ff00; x = x ^ t ^ (t<<8) ; t = (x ^ (x>>4)) & 0x00f000f0; x = x ^ t ^ (t<<4) ; t = (x ^ (x>>2)) & 0x0c0c0c0c; x = x ^ t ^ (t<<2) ; t = (x ^ (x>>1)) & 0x22222222; x = x ^ t ^ (t<<1) ; return x ; }
浣嶅帇緙╋細 閫夋嫨騫跺彸縐誨瓧x涓搴斾簬鎺╃爜m鐨?浣嶇殑浣?濡傦細compress(abcdefgh,01010101)=0000bdfh compress_left(x,m)鎿嶄綔涓庢綾諱技錛屼絾緇撴灉浣嶅湪宸﹁竟: bdfh0000. unsigned compress(unsigned x, unsigned m) { unsigned mk, mp, mv, t ; int i ;
x &= m ; mk = ~m << 1 ; for( i = 0 ; i < 5 ; ++i ) { mp = mk ^ ( mk << 1) ; mp ^= ( mp << 2 ) ; mp ^= ( mp << 4 ) ; mp ^= ( mp << 8 ) ; mp ^= ( mp << 16 ) ; mv = mp & m ; m = m ^ mv | (mv >> (1<<i) ) ; t = x & mv ; x = x ^ t | ( t >> ( 1<<i) ) ; mk = mk & ~mp ; } return x ; }
浜岃繘鍒剁爜鍒癎RAY鐮佺殑杞崲: unsigned B2G(unsigned B ) { return B ^ (B>>1) ; } GRAY鐮佸埌浜岃繘鍒剁爜: unsigned G2B(unsigned G) { unsigned B ; B = G ^ (G>>1) ; B = G ^ (G>>2) ; B = G ^ (G>>4) ; B = G ^ (G>>8) ; B = G ^ (G>>16) ; return B ; }
鎵懼嚭鏈宸?瀛楄妭鐨勪綅緗? int zbytel( unsigned x ) { static cahr table[16] = { 4,3,2,2, 1,1,1,1, 0,0,0,0, 0,0,0,0 } ; unsigned y ; y = (x&0x7f7f7f7f) + 0x7f7f7f7f ; y = ~(y|x|0x7f7f7f7f) ; return table[y*0x00204081 >> 28] ;//涔樻硶鍙敤縐諱綅鍜屽姞瀹屾垚 }