我觉得不行 发表于 2020-2-20 22:14:16

关于long int和long long int占用字节问题

在小甲鱼的P6视频数据类型中,有一段代码打印不同数据类型在系统中所占用的字节是多少,在这里我遇到两个问题,一个是编译的时候出现警告,
warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat=]
printf("int = %d\n", sizeof(int));
这里我百度了一下得知要把%d换成长整型%ld或%u无符号类型解决,但是在小甲鱼的视频中编译是没有报这个警告的,代码是一样的。

另一个是视频里的运行结果,long int = 4 , long long int = 8,但是我自己在电脑上运行的结果是long int = 8,long long int = 8, 我百度了一下,好像网上的都是long int
= 4

我不知道是不是操作系统的问题,我的编译环境是win10自带的linux子系统,安装了ubuntu,虽然这两个问题好像并不大,但是就是想知道原因,不然无法集中学习,希望大神可以解答一下我这两个问题,感激不尽

小甲鱼水里游 发表于 2020-2-21 14:47:19

关于计算机的,这个不是语言的问题,小甲鱼装的是32位的Linux(我不会用Linux,所以没看小甲鱼的C),而你的电脑应该是64位的,这个不影响学习

major_lyu 发表于 2020-2-22 18:10:42

int, long int, long long int 的长度与计算平台相关的.32位和64位机给出的结果肯定不同啊.
对于32位机:int:4字节 long int:4字节 long long int:8字节
对于64位机:int:4字节 long int:8字节 long long int:8字节

可以用下面的代码测试一下:
#include <stdio.h>
int main(void)
{
        printf("int: %ld\n", sizeof(int));
        printf("long int: %ld\n", sizeof(long int));
        printf("long long int: %ld\n", sizeof(long long int));
        printf("long : %ld\n", sizeof(long));
        printf("char : %ld\n", sizeof(char));
        printf("short : %ld\n", sizeof(short int));
        printf("float : %ld\n", sizeof(float));
        printf("double : %ld\n", sizeof(double));

        return 0;
}

页: [1]
查看完整版本: 关于long int和long long int占用字节问题