| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 903 人关注过本帖
标题:二进制的问题!!!!
取消只看楼主 加入收藏
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
结帖率:98.26%
收藏
已结贴  问题点数:20 回复次数:0 
二进制的问题!!!!
昨天在论坛上看见有个坛友发表了一篇有关于数据之间转换的帖子,其内容我拷贝了这里,
程序代码:
unsigned 的问题
unsigned char a=-1;
printf("%d",a);
输出255

为什么到了
unsigned int a=-1;
printf("%d",a);
输出就是-1 
看见这篇帖子,使我想到了当初在学习《深入理解计算机系统》一书时候遇到的种种关于数据之间转换的问题,但最后还是硬是啃了下来,觉得自己在这方面还是有点发言权吧,虽然自己是一个菜鸟呀!!!!!
个人想通过几道题,来大致的讲解一下有关这方面的问题!!!!!呵呵!!!!
菜鸟开课了呀!!!!

注:一下的题全是在Win32机器下运行

int x = -1 ;
unsigned int u = 2147483648
printf( "%u\n" , x ) ;
printf( "%d\n" ,u ) ;

请问一下该程序的输出结果是什么呢???

可能有很大一部分会对此比较有点头疼吧!!!
那菜鸟就讲解一下吧!!!!!我尽量讲解的比较详细点!!!!!

这个程序的目的是将一个int类型的变量x变为unsigned int 类型的值,同时将一个unsigned int 类型的变量u 变为int类型的值,
这个需要读者对计算机中存储的数据有点了解!!!!!
在讲解这道题之前先让我们来了解一下计算机中数据的存储知识!!!!
大家都应该知道二进制的原码、反码以及补码的知识了吧!!!!!

对于整型数来说分为了两种类型,一种是有符号数,另一种便是无符号数了。
对于无符号数没有什么所谓的二进制原码、反码以及补码一说,无符号数在计算机中的存储就是将一个无符号数转换为二进制来存储!!!比如对于unsigned int u = 4 ;
4的二进制码表示的是:100 ,而无符号数是四个字节(32位),所以该数在计算中的表示为:0000 0000 0000 0000 0000 0000 0000 0100 。而对于一个有符号数则出现了二进制的原码、反码以及补码一说(这一点一定要搞清楚,不要以为无符号数是以二进制原码表示的),比如对于一个int 类型的变量 x = -2 在计算机中是怎么表示的呢????首先我们要清楚-2在计算机中用的是二进制的补码表示的!!!!!这个补码是怎么计算出来的呢??
讲两个知识点:
1) 正数的补码取反加一,表示的是其对应的负数的补码。
2)负数的补码取反加一,表示的是其绝对值。
所以-2的补码是先求出2的补码是多少,2的补码是 :10 则-2的补码是对 10先取反变为了 0 1,然后加一变为了 10 ,所以-2的二进制表示为:
1111 1111 1111 1111 1111  1111 1111 1110

然后我们再来看一下开始的时候出的那道题,-1的二进制补码是:1111 1111 1111 1111 1111 1111 1111 1111 (int类型为32位)
在将该二进制解释为一个无符号数这个二进制码并不是补码了,该二进制码解释为无符号数为:4294967295 所以第一个printf输出的结果就是4294967295

再让我们看一下第二个printf输出是什么。2147483648的二进制码表示的是:1000 0000 0000 0000 0000 0000 0000 0000 该二进制码转换为int类型的数值是被当作二进制补码来处理的,1000 0000 0000 0000 0000 0000 0000 0000 能够表示的int类型的数值是:-2147483648 所以第二个printf输出的是:-2147483648 。

好了吧,就讲这么多吧,不知道读者是否看明白了!!!!
呵呵呵!本人也是菜鸟呀!!!!!
搜索更多相关主题的帖子: 二进制 
2010-09-25 10:58
快速回复:二进制的问题!!!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.052885 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved