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入门不难,但是深入理解它很难。只有实际碰到了才会知道它的各种特性。

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

C语言的类型大小的更多相关文章

  1. C语言各类型大小,结构体大小 sizeof(struct A)

    C语言类型大小总览 编译器pack指令 #pragma pack(n)——定义n字节对齐 C++固有类型的对齐取编译器对齐与自身大小中较小的一个 32位C++默认8字节对齐.gcc编译器默认4字节对齐 ...

  2. C语言整数类型在X86和X64下的字节大小

    C声明 32位机器(X86) 64位机器(X64) char 1 1 short int 2 2 int 4 4 long int 4 8 long long int 8 8 char * 4 8 f ...

  3. 深入理解计算机各种类型大小(sizeof)

    深入理解计算机各种类型大小(sizeof)   // Example of the sizeof keyword size_t  i = sizeof( int ); struct align_dep ...

  4. C语言指针类型 强制转换

    关于C语言指针类型 强制转换  引用一篇文章: C语言中,任何一个变量都必须占有一个地址,而这个地址空间内的0-1代码就是这个变量的值.不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个 ...

  5. 3. Go语言基本类型

    Go语言基本类型如下: bool string 数值类型 (int8, int16, int32, int64, int, uint8, uint16, uint32, uint64, uint, f ...

  6. 学习Golang语言(6):类型--切片

    学习Golang语言(1): Hello World 学习Golang语言(2): 变量 学习Golang语言(3):类型--布尔型和数值类型 学习Golang语言(4):类型--字符串 学习Gola ...

  7. C语言指针的大小

    C语言指针的大小 今天看到一道题目是这样的,写出以下变量在32位设备上的大小(占多少个字节) 然后其中就有一些指针类型的数据,那么我们知道在C语言中指针的大小都是一样的,不管是有数据类型的还是void ...

  8. 生成跨语言的类型声明和接口绑定的工具(Djinni )

    Djinni 是一个用来生成跨语言的类型声明和接口绑定的工具,主要用于 C++ 和 Java 以及 Objective-C 间的互通. 示例接口定义文件: # Multi-line comments ...

  9. web前端对上传的文件进行类型大小判断的js自定义函数

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

随机推荐

  1. 【Azure Developer】VS Code运行Java 版Azure Storage SDK操作Blob (新建Container, 上传Blob文件,下载及清理)

    问题描述 是否可以用Java代码来管理Azure blob? 可以.在代码中加入azure-storage-blob依赖.即可使用以下类操作Azure Storage Blob. BlobServic ...

  2. 如何建一个SAM

    部分改编自OI WIKI 先从一个简单的问题入手: 给定一个串,构造一个图,使其能够表示它的所有子串. 显然一个子串就是一个后缀的前缀.所以一个很显然的方式就是把所有后缀扔进trie里. 比如当前串是 ...

  3. AcWing 276. I-区域

    题目链接 设 \(0\) 为单调伸长, \(1\) 为单调伸短. 设 \(f[i][j][l][r][x(0 / 1)][y (0 / 1)]\) 为第 \(i\) 行,已经选出\(j\)个格子,第\ ...

  4. AcWing 199. 余数之和

    \(\sum_{i = 1}^{n} k \bmod i = n * k - \sum_{i = 1}^{n} \lfloor k / i \rfloor * i\) 显然,\(\lfloor k / ...

  5. nginx学习之——信号控制和配置

    一.信号控制 1)TERM, INT   Quick shutdown  \\麻溜停掉(暴力停止),一般不常用 // 启动和停止nginx 当前目录:/usr/local/bin/nginx 启动: ...

  6. word IF嵌套实现登记学生成绩(合格,良好,优秀)

    word IF函数 IF语法 IF(判断条件,条件成立的动作,条件不成立的动作),以逗号(英文)分隔 例:=IF( 0 < 1 , "good" , "bad&qu ...

  7. ado.net使用sqlparameter的方式

    使用sqlparameter的方式,最终执行的sql语句 exec sp_executesql N'select top 1 ID,ZhangHu,MiMa,RID,ShiJian,EndTime,I ...

  8. idea的下载与安装

    1.下载idea.到idea的官网选择你需要下载的,你最喜欢的版本https://www.jetbrains.com/idea/download/ 2.下载jdk.进入Oracle官网,鼠标指在Dow ...

  9. 去掉RedisDesktopManager更新提示弹窗

    去掉RedisDesktopManager更新提示弹窗 起因 每次打开RDM都要弹出一个更新提示弹窗,虽然打开次数不频繁,总是有个弹窗再点一次OK按钮,还不能设置关闭更新检查.更新下载还要各种登录麻烦 ...

  10. IDEA将Java Web项目打war包

    准备工作 1.IntelliJ IDEA开发工具 2.可以正常运行的Java Web项目 打war包流程 1.使用快捷键Ctrl+Alt+Shift+s 或者 鼠标点击选中项目名按F4 打开 Proj ...