论坛: 编程破解 标题: 补码存放问题 复制本贴地址    
作者: sniper167 [sniper167]    论坛用户   登录
函数实现功能:给出一个数的原码,求出该数的补码:

unsigned int getbits(unsigned valve)
{unsigned int z;
z=value&0100000;
if (z==0100000)
    z=~value+1;
else
    z=value;
return(z);
}

第三行是判断value是否为负,0100000应该是一个8进制数,0100000转化为二进制后为
001 000 000 000 000 000共18位了,如果是16位的计算机,在一个单元就放不下了。再内存中怎样存放?
是把前16位放一起,还是后16位放一起,或是只存放后16位,即只存放1 000 000 000 000 000?

地主 发表时间: 04-02-24 12:35

回复: 286 [unique]   版主   登录
没听明白你说的16位的计算机是什么意思,
所谓16位的计算机是指数据总线是16位的,只是CPU的总线也是16位,但并不是说所有的数都只能用16位表示,就象是你把公路分成16个车道,并不表示每次运输的货物都是16或16的倍数。
此处的0100000系统当然是全部保存了,至于再和value作与操作,二者位数不同,要作隐式转换。


B1层 发表时间: 04-02-24 13:24

回复: sniper167 [sniper167]   论坛用户   登录
明白了
谢谢

B2层 发表时间: 04-02-24 13:27

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号