int型数据99赋给unsighed intngnedint类型变量a,a的值为

共有 1825 人关注过本帖
标题:[求助]设有类型unsingned int a=65535,按%d格式输出a的值,为什么结果会是- ...
等 级:新手上路
&&问题点数:0&&回复次数:7&&&
[求助]设有类型unsingned int a=65535,按%d格式输出a的值,为什么结果会是-1呢?
有没有哪位老师可以告诉我下面这个问题是怎么回事啊?设有类型unsingned int a=65535,按%d格式输出a的值,为什么结果会是-1呢?很急哟,先谢谢了啊!
搜索更多相关主题的帖子:
&&&&&&&&&&
等 级:新手上路
帖 子:274
用%u,就OK。
深山苦学C语言,终年不见外面世界。
等 级:新手上路
非常感谢朋友的支持,不过,我始终不是很明白,我知道用%uc能达到目的,可就是搞不明白为什么用%d后的输出结果会是-1,能不能给我讲明白点!谢谢!
等 级:贵宾
威 望:10
帖 子:1020
专家分:167
回复:(雾斓)非常感谢朋友的支持,不过,我始终不是...
参考&计算机组成原理&中关于补码的部分
等 级:新手上路
貌似这样:在计算机中数值是按补码形式存放的.一个正数的补码是其本身,负数的补码要取反加 1 .unsingned int a=65535在计算机中为 11111;而%d是带符号的,所以要进行换算.即 -1 取反 得 00001, 符号位不变.所以得到 -1.
等 级:新手上路
回复:(雾斓)[求助]设有类型unsingned int a=65535,...
当你知道INT型数据的取值范围就知道怎么会是这样的答案了
等 级:新手上路
帖 子:92
11111作为unsigned时为65535,int时为-1
等 级:新手上路
非常感谢各位的指点,我总算弄懂了!而且连带的这类的问题全都能解决了,我好开心,好感谢各位哟,有机会一定得好好谢谢你们!我的QQ是,愿意当我老师加我哟,不过,我很笨哟
版权所有,并保留所有权利。
Powered by , Processed in 0.030620 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights ReservedC++ 数据类型与表达式_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
C++ 数据类型与表达式
上传于||文档简介
&&C​+​+​ ​数​据​类​型​与​表​达​式
大小:601.00KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢C语言&singned与unsigned
int main()
char a[1000];
for(i=0; i&1000; i++)
a[i] = -1-i;
printf("%d",strlen(a));
此题看上去真的很简单,但是却鲜有人答对。答案是255。别惊讶,我们先分析分析。
&&& for 循环内,当i
的值为0 时,a[0]的值为-1。关键就是-1 在内存里面如何存储。
我们知道在计算机系统中,数值一律用补码来表示(存储)。主要原因是使用补码,可
以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数
相加时,如果最高位(符号位)有进位,则进位被舍弃。正数的补码与其原码一致;负数的
补码:符号位为1,其余位为该数绝对值的原码按位取反,然后整个数加1。&&&
按照负数补码的规则,可以知道-1 的补码为0xff,-2
的补码为0xfe……当i 的值为127
时,a[127]的值为-128,而-128 是char 类型数据能表示的最小的负数。当i 继续增加,a[128]
的值肯定不能是-129。因为这时候发生了溢出,-129 需要9 位才能存储下来,而char 类型
数据只有8 位,所以最高位被丢弃。剩下的8 位是原来9 位补码的低8 位的值,即0x7f。
当i 继续增加到255 的时候,-256 的补码的低8 位为0。然后当i
增加到256 时,-257 的补
码的低8 位全为1,即低八位的补码为0xff,如此又开始一轮新的循环……
按照上面的分析,a[0]到a[254]里面的值都不为0,而a[255]的值为0。strlen 函数是计
算字符串长度的,并不包含字符串最后的‘\0 ’。而判断一个字符串是否结束的标志就是看
是否遇到‘\0 ’。如果遇到‘\0 ’,则认为本字符串结束。
分析到这里,strlen(a)的值为255 应该完全能理解了。这个问题的关键就是要明白char
类型默认情况下是有符号的,其表示的值的范围为[-128,127],超出这个范围的值会产生溢
出。另外还要清楚的就是负数的补码怎么表示。弄明白了这两点,这个问题其实就很简单了
int i = -20;
unsigned j = 10;
i+j 的值为多少?为什么?
解答1:int和unsigned int运算时int会自动转成unsigned
intint和unsigned
int都是4字节(32位情况下)存储,区别是int最高位是符号位,用来表示正负
负数用补码存储,-20存储为,这个东西转为unsigned
int后就是一个很大的数了,所以最后结果是
解答2:这要看你的i+j的输出格式的& 如果是%u
输出的话那肯定是没有负数的。应该是一个很大的正书。但是以%d输出的话就会转成int 类型了&
就会是-10了
下面的代码有什么问题?
&&& unsigned i
(i=9;i&=0;i--)
printf("%u\n",i);
解答:原因是& i&=0&
始终成立!
因为 i 被定义为无符号的整数。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。c_new_02_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
上传于||暂无简介
大小:138.00KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢C语言的数据类型(1、2、3)_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C语言的数据类型(1、2、3)
上传于||文档简介
&&C​语​言​的​数​据​类​型​(、、)
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩1页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 5sing 的文章

 

随机推荐