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位。
如何确保声明的类型的大小范围符合预期
- 去查看该平台的大小定义,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
- 在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语言的类型大小的更多相关文章
- C语言各类型大小,结构体大小 sizeof(struct A)
C语言类型大小总览 编译器pack指令 #pragma pack(n)——定义n字节对齐 C++固有类型的对齐取编译器对齐与自身大小中较小的一个 32位C++默认8字节对齐.gcc编译器默认4字节对齐 ...
- 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 ...
- 深入理解计算机各种类型大小(sizeof)
深入理解计算机各种类型大小(sizeof) // Example of the sizeof keyword size_t i = sizeof( int ); struct align_dep ...
- C语言指针类型 强制转换
关于C语言指针类型 强制转换 引用一篇文章: C语言中,任何一个变量都必须占有一个地址,而这个地址空间内的0-1代码就是这个变量的值.不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个 ...
- 3. Go语言基本类型
Go语言基本类型如下: bool string 数值类型 (int8, int16, int32, int64, int, uint8, uint16, uint32, uint64, uint, f ...
- 学习Golang语言(6):类型--切片
学习Golang语言(1): Hello World 学习Golang语言(2): 变量 学习Golang语言(3):类型--布尔型和数值类型 学习Golang语言(4):类型--字符串 学习Gola ...
- C语言指针的大小
C语言指针的大小 今天看到一道题目是这样的,写出以下变量在32位设备上的大小(占多少个字节) 然后其中就有一些指针类型的数据,那么我们知道在C语言中指针的大小都是一样的,不管是有数据类型的还是void ...
- 生成跨语言的类型声明和接口绑定的工具(Djinni )
Djinni 是一个用来生成跨语言的类型声明和接口绑定的工具,主要用于 C++ 和 Java 以及 Objective-C 间的互通. 示例接口定义文件: # Multi-line comments ...
- web前端对上传的文件进行类型大小判断的js自定义函数
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
随机推荐
- windows+jenkins+iis 部署
1.安装jenkins 下载地址:https://www.jenkins.io/download/ 2.需要配置java环境 配置教程:https://www.cnblogs.com/liuxiaoj ...
- STL-Vector容量问题:
1.clear,erase ,pop_back() 函数只删除对象,并没有释放vec中的内存,若对象是指针还需要delete:2.在erase,clear,pop_back()删除对象的后,size改 ...
- NOI Online #2 提高组 游记
没 NOI Online 1 挂的惨就来写游记吧,不知道为啥 NOI Online 1 民间数据测得 60 分的 T1 最后爆零了... 昏昏沉沉的醒来,吃了早饭,等到 \(8:30\) 进入比赛网页 ...
- CSP-S 2019 Emiya 家今天的饭
64 pts 类似 乌龟棋 的思想,由于 \(64pts\) 的 \(m <= 3\), 非常小. 我们可以设一个 \(dp\),建立 \(m\) 个维度存下每种物品选了几次: \(f[i][A ...
- gunicorn简单配置
Gunicorn配置 # -*- coding: utf-8 -*- import os from multiprocessing import cpu_count bind = "127. ...
- 移动端H5开发中的常见问题处理
1.问题之合成海报: 功能技术:http://html2canvas.hertzen.com 问题描述:合成模糊.合成区域内容错位,合成不完整,合成边缘白条等. 解决方案:如有页面布局正常合成错位的, ...
- Linux下keepalived配置
1.背景 节点1:192.168.12.35 节点2:192.168.12.36 2.keepalived安装 使用yum仓库安装keepalived [root@node01 ~]# yum ins ...
- js 控制输入框保存数字级小数点后一位
$('#Question8').on('keyup', function () { var regVoter = $("#Question8").val(); regVoter = ...
- js上 十三、函数初步-2
13-1.函数的参数 函数的本质: ü 函数的作用,代码重用,编写一个函数,就是为了解决一类问题. ü 函数每次调用,都有一个结果,那么结果和什么相关呢?y = x , y = x2,y = sin( ...
- php代码审计小技巧
1.file_put_contents()函数:众所周知此函数是将一个字符串写入至文件中. 看到此函数说明当传入数据为数组时,会被PHP强制转换为字符串,因此会绕过正则达到getshell的目的. & ...