今天突然遇到一个奇怪的问题,代码如下/* main.c */#include int main (void){ int dat = 0xFFFFFFFF; while (dat) { printf ( "%x\n",dat); dat >>= 1; } return (0);}#gcc -g -Wall main.c #./aFFFFFFFFFFFFFFFF.................^C# 我一直以为 signed 和 unsigned 的区别在于编译器对待他们的态度,底层永远是补码,这样,0xFFFFFFFF,按我的设想,一定是32个循环完事,因为无论 Read More
posted @ 2013-10-17 17:42 moon_cat Views(257) Comments(0) Diggs(0) Edit
例如 0xFFFF0000 倒转 0x0000FFFF开始的时候想到一个办法,是这样:/* 32 位机器 */static unsigned reverse (unsigned dat){ int i = 0,low,high; for (i = 0 ;i >i ; high = (dat & (1>(31-i) ; dat = (dat & ~((1>= 1; }while (dat);}这个就简单多了,没有用乘除,只用累加即可。。。。。。。。 Read More
posted @ 2013-10-17 16:53 moon_cat Views(172) Comments(0) Diggs(0) Edit