长长和长长的区别

Difference between long and long long

what is the difference between The long and long long. i'm using 64bit windows sysem. for me sizes and ranges of long and long long are same. Answer me in detail

#include<stdio.h>
int main()
{
    printf("long size: %d\n",sizeof(long));
    printf("long long size: %d\n\n",sizeof(long long));
    long value1=9223372036854775807;
    long long value2=9223372036854775807;
    printf("Max Limits\n");
    printf("value1: %li\n",value1);
    printf("value2: %lli\n\n",value2);
    //overflow of the range
    value1++;
    value2++;
    printf("value1: %li\n",value1);
    printf("value2: %lli\n",value2);

    
    /* OutPut OutPut OutPut
    long size: 8
    long long size: 8

    Max Limits
    value1: 9223372036854775807
    value2: 9223372036854775807
 
    value1: -9223372036854775808
    value2: -9223372036854775808*/

}

Difference between long and long long.

long 的最小范围为 +/-(231 - 1).

long long 的最小范围为 +/-(263 - 1).

下面的代码具有不同的可移植性。

long      value1 = 9223372036854775807;  // Not always portable.
long long value2 = 9223372036854775807; // OK

即使 longlong long 具有相同的范围(它们在其他实现中可能不同),它们仍然是不同的类型,因此使用 _Generic 创建不同的功能。

#define foo(X) _Generic((X), \
long: "Blue", \
long long: "No red!" \
)

int main() {
  puts(foo(1L));
  puts(foo(1LL));
}

输出

Blue
No red!

C 类型的目的是灵活的,因此它们可以适应不同 C 实现中的不同情况。因此,在某些 C 实现中,longlong long 具有相同的宽度(用于值的位数)和大小(总字节数,包括填充)。 (其他一些类型可以大小相同。例如,shortint 可以相同。)

longlong long 具有相同宽度和大小的 C 实现中,它们之间没有算术差异。存在技术差异。特别是,指向 long 的指针与指向 long long 的指针是不同的类型,您不应在需要另一个的地方使用一个。