加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

有符号数和无符号数之间的转换

(2010-09-02 19:47:00)
标签:

it

分类: 计算机学习

main( )
unsigned a=32768;
   printf(“a=%d\n”,a); }

答案是 a=-32768。

首先,unsigned是表示一个变量(或常数)是无符号类型。signed表示有符号。

unsigned & signed I

 无符号数的数值范围0-65535,有符号数的数值范围在-32768- +32767之间.所以有符号运算比无符号运算耗资源.

无符号数32768的二进制形式为1000 0000 0000 0000.

ƒ 在转换为有符号数时,由于最高位表示符号数,因此可以理解其为一个负数。负数采用2的补码(two's complement)表示。“要把内存中以补码形式存放的二进制码转换成十进制的负数步骤如下:
  1.先对各位取反
  2.将所得的二进制数转换成十进制数
  3.因为最高位为1,因此在所得的十进制数前面加负号.
  4.对所求得的数再减1,即可.

„ 按照上面的步骤:各位先取反,0111 1111 1111 1111 ;再转为十进制数,32767;再在所得的数前加负号,-32767;再减1,即为-32767-1=-32768.。


unsigned & signed Ⅱ

main()
{ int  b=-2;
  printf(“b=%u”,b); }
答案是b=65534。

其具体步骤为:

 Œ先取-2的绝对值2的原码:0000 0000 0000 0010 
 将其转换为反码:1111 1111 1111 1101 
 Ž加1补码:1111 1111 1111 1110

十进制形式就是无符号数 65534

这就是我理解后的复述.欢迎大家一起讨论

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有