C语言的类型大小

C语言的类型大小

设计程序的时候我们一般会考虑的尽量的周全,尤其是像C这样的静态类型语言。
有一些溢出的问题就源于没有搞清楚变量的大小范围,所以我们编写的时候需要特别注意

C的整形(整数类型)大小

C的类型大小并没有明确的定义,类型的大小取决于它所用的编译器,所以说同一份代码,在不同平台下编译。有可能会有不一样的结果。
能确保的只有以下几点

  • char 类型可以放小于等于127的值;
  • short int 和int 可以存放小于等于32767的值;
  • long int 可以保存小于等于2 147 483 647的值;
  • char 至少有8位,short int 和int 至少有16位,而long int 则至少有32位。

如何确保声明的类型的大小范围符合预期

  1. 去查看该平台的大小定义,ANSI C中规定在该平台的头文件<limits.h>应该有明确的定义
    或者可以自己编写程序测试
    示例代码如下:
#include <stdio.h>

int main() {
    int size_byte_of_char = sizeof(char);
    int size_of_char = size_byte_of_char*8 - 1;
    int size_byte_of_short = sizeof(short int);
    int size_of_short = size_byte_of_short*8 - 1;
    int size_byte_of_int = sizeof(int);
    int size_of_int = size_byte_of_int*8 - 1;
    long int size_byte_of_long = sizeof(long int);
    long int size_of_long = size_byte_of_long*8 - 1;
    printf("char size = %d\n",(1<<size_of_char) - 1);
    printf("short size = %d\n",(1<<size_of_short) - 1);
    printf("int size = %d\n",(1<<size_of_int) - 1);
    printf("long size = %ld\n",(long)((1l<<size_of_long) - 1));
    return 0;
}

64位系统下运行结果:

Kevin@~ $ gcc main.c -o intsize
Kevin@~ $ intsize  ./intsize
char size = 127
short size = 32767
int size = 2147483647
long size = 9223372036854775807

  1. 在C语言中有些库帮我们做好这种事了
    那就是<inttypes.h>
    这里面用宏定义定义好了我们需要的大小的类型,例如int8_t、uint8_t、int16_t从8、16、32、64都有。
    这个非常容易理解
    8就是指长度为8位的整形,即最大127,最小-127。那么加个u就是无符号的8位整形,即,0~255。
    16、32依此类推。

总结

总之,C是一门需要程序员多走一步的语言,它默认使用它的人懂得它的禁忌。
所以说C入门不难,但是深入理解它很难。只有实际碰到了才会知道它的各种特性。

最近实在有点懒,在这里对我的粉丝们说声对不起

posted @ 2020-12-25 00:15  '昵称'undeclared  阅读(251)  评论(0编辑  收藏  举报