zoukankan      html  css  js  c++  java
  • 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
    ",(1<<size_of_char) - 1);
        printf("short size = %d
    ",(1<<size_of_short) - 1);
        printf("int size = %d
    ",(1<<size_of_int) - 1);
        printf("long size = %ld
    ",(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入门不难,但是深入理解它很难。只有实际碰到了才会知道它的各种特性。

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

  • 相关阅读:
    JavaSE_11_File类、递归
    JavaSE_10_IO流
    leyou_07_对数据的操作
    JavaSE_09_Map
    JavaSE_08_Collections常用功能
    java 22
    java 22
    java 22
    java 22
    java 22
  • 原文地址:https://www.cnblogs.com/nbtech/p/C_int_size_range.html
Copyright © 2011-2022 走看看