| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 341 人关注过本帖
标题:刚学习C求解2个菜问题?
只看楼主 加入收藏
stukk
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-4-21
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
刚学习C求解2个菜问题?
1. 整形变量int a与short b在内存中都是占用两个字节,取值范围都是-32768~32767,默认都是带符号整数(正整数)那么它们有什么区别呢?即什么情况下用类型符int什么情况下用short?
main()
{
   int a;
   short b;

   a=32767;
   b=32767;
   printf("a=%d\nb=%d,"a,b);
}

+++++++++++++++++++++++++++++++++++++++++++++
2. 下面代码中变量a, b, c,既然定义了是无符号整数(人为的赋予负值)为何输出全为负数?不能强制转换为正吗?
main()
{
   unsigned a;
   unsigned short b;
   unsigned long c;
   a=-32767;
   b=-32767;
   c=-882767;
   printf("a=%d"\n,a);
   printf("a=%d"\n,b);
   printf("a=%ld\n",c);
}

刚学习C弄的头昏脑胀的。。。有些基础的实在弄不明白~~

[ 本帖最后由 stukk 于 2010-4-21 10:44 编辑 ]
搜索更多相关主题的帖子: 学习 正整数 
2010-04-21 10:30
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
收藏
得分:10 
2 有符号整数只是把第一位看成是符号位,所以a=-16其实是-16在内存中(假设int是32位)是1111 1111 1111 1111 1111 1111 1111 0001
  然后把这个值当成是无符号的,赋值给a,所以a=power(2,32)-1-15;但是printf的时候指定了%d,就输出了有符号的值-16了,假如想输出
  无符号值,那么改成printf("a=%u\n",a);
1 int和short在内存中占用字节数好像是跟编译器有关的,在gcc中int是4个字节的,short是两个字节的
2010-04-21 11:09
ubuntulover
Rank: 4
等 级:业余侠客
帖 子:77
专家分:256
注 册:2010-4-9
收藏
得分:10 
第一个问题:关于int和short类型的长度,这个c语言标准并没有规定,C语言标准只是规定int类型的长度不小于short。因此有的系统中int和short类型的长度一样,有的系统中前者长于后者。你不能对此做任何主观断定,否则程序不利于移植。
第二个问题:十进制数字在计算机中是按二进制存储的(可能是补码或别的形式),你输出时要求什么格式,计算机就当那几个位是什么格式的,因此同一组位的组合,你按有符号和无符号的形式输出,结果肯定是不同的
2010-04-21 11:57
stukk
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-4-21
收藏
得分:0 
谢谢楼上两位。。明白了,也就是说,不管是数字,字符,字符串在计算机中是以ASCII对应的编码(二进制)形式存在的(<=127),8bit=1byte,最高位为符号位。负数是以补码形式存在的
最高位总为1.整数和字符最高为0。
2010-04-21 12:55
快速回复:刚学习C求解2个菜问题?
数据加载中...
 
   



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

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