C语言-整数

1、整数类型:

         long int;

         long;

         short int;

         short; ubsigned int; unsigned; unsigned long;unsigned short;long long;

short类型可能比int类型占用的空间少,long类型可能比int类型占用的空间多。C语言只是规定short类型必能比int占用空间多,long不能比int占用空间少

         各种类型的int占用的空间不一定时固定的(因为机器的不同而不同),C标准只对基本类型规定了最小大小

          在我当前的电脑上(64位机)int的范围【-2147483648,2147483647】,unsigned int 的范围【0,4294967295】,整数溢出后的效果是什么呢?

#include<stdio.h>

int main(void)

{

    int i=2147483647;

    unsigned int j = 4294967295;



    printf("%d %d %d\n",i,i+1,i+2);

    printf("%d %d %d\n",j,j+1,j+2);



    return 0;

}

结果图下图:

 
 

 

 

2、打印short、long、long long和unsigned类型

      打印unsigned int使用%u转换说明、long使用%ld,如果电脑中的long和int是同样的位数可以直接都用%d打印但是移植到其他不同的机器上的时候会出错。打印八进制和十六进制也是直接在o和x前面加上%。

    %hd是指short类型的整数(十进制),h和l前缀都可以和u一起使用(h,l在前,u在后),long long类型用%lld和%llu分别表示有符号和无符号。

//print2.c代码    

#include<stdio.h>

int main(void)

{

    unsigned int un = 3000000000;

    short end = 200;

    long big = 65537;

    long long verybig = 12345678908642;

 

    printf("un = %u and not %d\n",un,un);

    printf("end = %hd and %d\n", end, end);

    printf("big = %ld and not %hd\n", big, big);

    printf("verybig = %lld and not %ld\n", verybig, verybig);

 

    return 0;

}

结果如下:

结果可能都不会相同(随机器的不同而不同)。

其中需要解释的是第二行的输出,不管使用hd环视d输出的都是200,因为电脑中在给函数传递参数的时候都会转换成int来传递,所以输出的都是一样的。最后一行的输出有的电脑会输出“verybig = 1234567890864 and not 1942899938”我的电脑中long的位数应该是64位的足够显示这个例子中正确的数字,但是如果是32位的就会显示错误的数字。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章