有关C语言 我是初学者

我买的书在强制类型转换这节中有句话“有符号数和无符号数之间的转换在于最高位。有符号数向无符号数转换时,原来的符号位不再作为符号,而变为数据的一部分;无符号数向有符号数转换... 我买的书在强制类型转换这节中有句话“有符号数和无符号数之间的转换在于最高位。有符号数向无符号数转换时,原来的符号位不再作为符号,而变为数据的一部分;无符号数向有符号数转换时,最高位被当作符号位。”这句话是什么意思,我是初学者,麻烦讲详细点 展开
 我来答
NaNi_Z
2013-07-24 · TA获得超过170个赞
知道小有建树答主
回答量:88
采纳率:0%
帮助的人:99.5万
展开全部
以一个字节为例,一个二进制形式为“11111111”的数
当它为有符号数时,第一位是符号位,“1”表示它为负数,之后7个“1”为该数的数值。因为负数采用补码形式存储,所以这个数是-1
当它为无符号数时,第一位也是数值位,8个“1”表示255

有符号数向无符号数转变时,第一位符号位变成数值位,这样“-1”变成了“255”
无符号数想有符号数转变时,第一位数值位变成符号位,这样“255”变成了“-1”

希望能帮到你,望采纳^ ^
beiexa
2013-07-25 · 超过14用户采纳过TA的回答
知道答主
回答量:27
采纳率:0%
帮助的人:26.7万
展开全部
NaNi_Z 的回答已经大概说明了有符号和无符号的区别。

默认情况下,基本的几个整数类型的最高位被默认为符号位,实际上不管是有符号还是无符号,它在内存中,都只有一种形式,那就是0-FFFFFFFF。

有符号和无符号整数类型的区分,只针对编译器,编译器会根据有符号和无符号来选择如何编译它的运算过程,而最终输出的东西,还是取决于你自己,在标准输出流中,是在ostream中直接有类型的重载,所以cout能直接根据有符号和无符号的正确类型来选择输出。

unsigned int n = 0xFFFFFFFF;
printf("%u, %d\n", n, n);
cout<<n<<endl;

int n2 = -1;
printf("%u, %d\n", n2, n2);
cout<<n2<<endl;

如果要了解有符号和无符号的具体运算过程,你可以写几个加减乘除的代码下个断,看看反汇编。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gongzhulaopoai
2013-07-24 · TA获得超过728个赞
知道小有建树答主
回答量:609
采纳率:33%
帮助的人:495万
展开全部
这本书讲的不好,等下我给你解释一下。其实很简单,就是有符号数可能是负数,如果是负数呢,就需要转符号,需要加个数在计算,无符号本身如果很大就会存在溢出,所以就需要看最高为了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
淡腾摇铭
2013-07-24 · 超过15用户采纳过TA的回答
知道答主
回答量:97
采纳率:0%
帮助的人:48万
展开全部
C语言中有符号整数类型通过最高位来判断他是不是最高位。最高位时1时,代表有符号,最高位时0时,代表无符号。在做强制类型转换时,当然就是书上说的那样。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我是杨凯凯
2013-07-24 · TA获得超过194个赞
知道小有建树答主
回答量:189
采纳率:85%
帮助的人:40.8万
展开全部
最高位时1时,代表有符号,最高位时0时,代表无符号。
这是这个游戏的规则
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式