有这样一道C语言题:unsigned int b=65535;printf("%d",b);结果为什么...

发布网友 发布时间:3小时前

我来回答

5个回答

热心网友 时间:4分钟前

主要问题是出在输出控制上,因为你定义的是无符号整数因此16位都用来表示数值,没有符号位,但是你输出处用%d是不对的,%d是用来输出有符号整型数的。因此会将b的值以有符号的形式输出。而65536这个值在16位有符号整数表示中正好是-1.

现在基本都是用32位表示整型数了,因此这样写,不会在32位编译系统中发错误。

热心网友 时间:5分钟前

szy1_119 的回答是正确的。

热心网友 时间:9分钟前

你可能是用的老版本的c编译程序吧 (turbo2.0吧)
现在的新版本例如 visual6.0 已经把这个问题解决了
不同的编译系统分配的字节有差别

热心网友 时间:6分钟前

楼上说的很清楚

热心网友 时间:4分钟前

unsigned int b=65535 换成二进制 是16个1,在带符号位的表示中16个1代表-1.
以为16个1+1=0 (111111111111111+1 每个都进位 ,最后溢出,变成一串0)

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com