回调是逻辑上最清晰的一种办法了,协程不应该用在这个地方。
和BIG-ENDIAN or LITTLE_ENDIAN有关,推荐少用。
其实也不复杂,只要知道float在内存里是怎么存储的就简单的很了
IEEE:
float:
Sign Exponent Mantissa
1bit 8bits 23bits
实际上float的Mantissa是24位,有一个隐含的最高位,且该位一直为‘1’
Mantissa表示1~2之间的数
Expoent=0x7f表示指数0, Expoent>0x7f为正指数,Expoent<0x7f则为负指数
很邪恶啊,我还是喜欢简单一些的。。。
int fun(int v)
{
int res = 1;
while (res < v)
res <<= 1;
return res;
}
re: 本次服务端搬平台的一些体会。 大日如来 2008-04-09 22:51
@Kevin Lynx
我想表达的意思只是处理第一个user的时候地址越界,把第二个user的pool置空,这种错误经常发生,比如我就干过这样的。
#define MAX_USERNAME 25
struct cUser
{
char name;
...
};
cUser* user = (cUser*)malloc(sizeof(cUser));
user->name = (char*)malloc(sizeof(MAX_USERNAME));
这样申请第一个user没问题,第二个就报错,调用堆栈不会显示sizeof(MAX_USERNAME)这种低级错误。要跟出来只能靠经验了。