这个和 *** 作系统有关,一般int的长度都会采用机器字长,比如win32系统,int占4字节,32位;
如果是64位主机,int占64位,但这不是一定的,还要看编译器类型等因素。
在C语言中,double、long、unsigned、int、char类型数据所占字节数和机器字长及编译器有关系: 所以,int,long int,short int的宽度都可能随编译器而异。但有几条铁定的原则(ANSI/ISO制订的):
sizeof(short int)<=sizeof(int)
sizeof(int)<=sizeof(long int)
short int至少应为16位(2字节)
long int至少应为32位。 unsigned 是无符号的意思。
例如:
16位编译器
char :1个字节
char(即指针变量): 2个字节
short int : 2个字节
int: 2个字节
unsigned int : 2个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
32位编译器
char :1个字节
char(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
64位编译器
char :1个字节
char(即指针变量): 8个字节
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 8个字节
long long: 8个字节
unsigned long: 8个字节
for的条件,你是相对pow函数的返回值强制取整,所以应该是
for(i=1;(x%(int)(pow(10,i)))==0;)
你写成了
for(i=1;(x%int(pow(10,i)))==0;)
缺少这个小括号,编译器认为你在定义变量
=======================
还有,求整数长度,你用itoa转成字符串,然后strlen求长度不就是了多简单的事啊
char就是1字节(固定不变),short不少于2字节,int不少于short,long不少于4字节,且long不少于int,long long不少于long。
除了char,其他整型范围都是相对而言的,确保后一种的宽度不低于前一种即可(可能相等),在不同的年代,计算机硬件发展不同,内存、外存容量也不同,主流编译器在设计的时候会综合考虑计算机硬件的情况,来设计每一种数据类型的实际宽度。
char型在任何情况下都是占1个字节,而比如int型,它的长度与环境的字长相同,在16位的环境中,它占16位,2个字节;32位环境中占4个字节。
扩展资料
在C语言中可以用sizeof运算符,获取数据类型或者变量所占的内存字节数。示例代码如下:
#include int main()
{
printf("%d\t%d\t%d\n", sizeof(int), sizeof(short), sizeof(long));
return 0;
}
很想知道你这样做的场景是什么?如果是只想取前数组的前4个数,直接根据a[i](i=0,1,2,3)取就可以了,如果你是非要变成4个数字的数组,那就重新定义一个数组,把之前的数据前4个数copy过去。
以上就是关于c语言计算int型数据的字长,求大神详细解释全部的内容,包括:c语言计算int型数据的字长,求大神详细解释、求一个int型整数的长度、C语言的char,short,int和long类型分别有多长等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)