首页
社区
课程
招聘
[旧帖] [求助]关于整数型变量的问题 0.00雪花
发表于: 2010-8-24 10:28 1279

[旧帖] [求助]关于整数型变量的问题 0.00雪花

2010-8-24 10:28
1279
#include<stdio.h>
void main()
{
long int max(long int x,long int y,long int z);
long int a,b,c,d;
scanf("%d,%d,%d",&a,&b,&c);
d=max(a,b,c);
printf("max=%d\n",d);
}

long int max(long int x, long int y,long int z)
{
long int v;
v=x;
if(y>v)
  v=y;
else;
if(z>v)
  v=z;
else;
return(v);
}

根据书上说的把int 替换为 long 后,变量存储值大小范围依然是-32767~32767,请帮忙看看哪里出了问题。

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
C标准没规定各类型具体的内存字节数,只要求long不小于int,short不长于int
根据机器硬件决定
2010-8-24 11:42
0
雪    币: 142
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
头文件里面有定义,x86机器下,一般long都定义为int整数型,long long有的定义为int64,有的系统还是int。
一般编译器对于数据类型的使用,基本是从char,short,int,float和double这几个衍生出来的。
具体的定义可以查看不同操作系统和硬件平台的编译器数据类型定义。如果不想看,可以在相应软硬件平台下
写个程序进行反汇编。
一般x86的32位情况下:
对于int和long,操作可能是占用一个寄存器,例如mov eax,int
对于char的操作,一般只用一个al,例如mov al,char
对于float的操作,变化稍多一点,可以用整个寄存器,例如mov eax,float
经常可以看到类似
fld float
fstp xxx
这样的操作。
对于double类型,如果只用cpu寄存器,一般采用两个寄存器存储,或者放到一个结构变量的方式,如
struct dd

     int a;
    int b;
};
,如果使用fpu,和float在汇编上表现一致,
只在opcode方面有差别,这个可以查看 具体指令的手册,如英特尔手册。
对于long long类型,有的系统定义为int64,这时基本使用俩寄存器进行操作,或和double全局或局部变量存储方法一致,唯一的区别就是他不使用fpu。
其他各种类型在反汇编或者头文件中一目了然的。
2010-8-24 13:56
0
游客
登录 | 注册 方可回帖
返回
//