| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1471 人关注过本帖
标题:long与int数值上界
取消只看楼主 加入收藏
prototype
Rank: 2
等 级:论坛游民
威 望:1
帖 子:21
专家分:32
注 册:2015-6-21
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
long与int数值上界
#include <stdio.h>
int main()
{
 int y,h;
 long j,k;
 printf("int型:\n");
 for(h=1;h>=0;h++)
 y=h;
 printf("h=%d             y=%d\n",h,y);
 printf("int的数值上界%d\n",y);
 printf("long型:\n");
 for(j=1;j>=0;j++)
 k=j;
 printf("h=%ld             y=%ld\n",j,k);
 printf("long的数值上界%ld\n",k);
getchar();
getchar();
      }
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: include 
2015-06-22 17:40
prototype
Rank: 2
等 级:论坛游民
威 望:1
帖 子:21
专家分:32
注 册:2015-6-21
收藏
得分:0 
long与int一样,C标准规定long不小于int,short不大于int
所以short的上界为32767

a man a plan a canal-panama
2015-06-22 17:42
prototype
Rank: 2
等 级:论坛游民
威 望:1
帖 子:21
专家分:32
注 册:2015-6-21
收藏
得分:0 
有符号整数溢出:如果在一个'int'类型(比如)上的算术溢出,其结果是未定义的。一个例子是"INT_MAX+1"不保证是INT_MIN。这个行为启动了对某些代码是重要的某种类型的优化。例如,知道INT_MAX+1是未定义的,允许把"X+1 > X"优化为"true"。知道乘法“不会”溢出(因为这样做将是未定义的)允许把"X*2/2"优化为"X"。尽管这些可能看起来微不足道,这些事情通常通过内联及宏展开展露。这允许的一个更重要的优化是对像这样的"<="循环:

for (i = 0; i <= N; ++i) { ... }
在这个循环中,编译器可以假定该循环将实际迭代N+1次,如果"i"对溢出是未定义的,这允许各种循环优化的介入。另一方面,如果该变量被定义为对溢出回绕,那么编译器必须假定该循环可能是无限的(如果N是INT_MAX,这会发生)——这会禁止这些重要的循环优化。这特别地影响64位平台,因为如此多的代码使用"int"作为索引变量。

值得注意的是,无符号溢出被保证定义为2的补码溢出(回绕),因此你总是可以使用它们。使得有符号整数溢出有定义的代价是,失去这些类型的优化(例如,一个常见的症候是在64位平台上的循环中有大量的有符号扩展)。Clang与GCC都接受"-fwrapv"标记,它强制编译器把有符号整数溢出处理作有定义(除了INT_MIN除以-1)。

            ------------------------------------------------引自http://blog.

a man a plan a canal-panama
2015-06-24 06:22
prototype
Rank: 2
等 级:论坛游民
威 望:1
帖 子:21
专家分:32
注 册:2015-6-21
收藏
得分:0 
for(int h=1; h>=0; h++ )
是错误的,因为循环中并没有定义int h=1

a man a plan a canal-panama
2015-06-24 06:24
快速回复:long与int数值上界
数据加载中...
 
   



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

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