首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求补码转换成原码函数,该怎么解决

2012-04-26 
求补码转换成原码函数假设有一个补码 57345(十进制)-----0xE001 求一个函数能把他转换为10进制的原码[解决

求补码转换成原码函数
假设有一个补码 57345(十进制)-----0xE001 求一个函数能把他转换为10进制的原码

[解决办法]

C/C++ code
unsigned short get(short x ) {    short y ;    y = x >> 15 ;    return ((x^y)-y)|(y<<15);}输入是以x对应的二进制数.正数的补码是其本身,故上述代码对最高位为0的数,返回的不变.y始终为0.负数的补码是数值位取反再加1,换句话说,就是把绝对值求出来再把最高位补上(返回的是以unsigned short的形式,实际上就是abs(x)+32768).由于要保符号故y对应的二进制就是1111111111111111x^y就相当于取反,再减去y,由于是有符号的,就是加上1,负数:取反加1就是其绝对值.再通过或上y<<15把最高位置1.(其它办法或上也行)例:原      反        补-47      10101111  11010000  11010001输入是11010001对这个二进制位对应的数,由于计算机的补码表示,实际输入就是-47.y = x >> 15;结果是-1x^y = 00101110再减去y00101111最后或上1000000010101111(上面的只是八位的为例,自己看作16位的)得到原码,并且存放在unsigned short里正数很简单...y是零了,都没变通过这个程序如果没有|(y<<15)返回类型为short就成为用位操作求整数的绝对值的程序了. 

热点排行