C语言有5种基本的数据类型,分别为 字符型、整型、单精度浮点型、双精度浮点型、空类型。

在不同的操作系统或硬件平台中,这些数据类型的值域范围和所占用的内存是有差异的。这种差异影响了C语言的可移植性能,但如果能深入理解数据类型的构成,则可以最大程度避免该问题。

2.1.1 基本数据类型的字长与范围

字长是指数据所占用内存的数量,字长决定了数据类型的值域,即范围。以字符型为例,ANSI C标准中的字符型的长度是 1 字节(8位二进制编码),可计算其值域为 -2的7次方 - +2的7次方,取值范围为 -128~127。
计算机所使用的ASCII字符编码共有 128 个元素,所以用字符型可将全部元素表示出来。依次类推,ANSI C 标准中其他基本类型的字长与范围如下表所示:

ANSI C标准基本类型的字长与范围
基本类型 字长 范围
char(字符型) 1字节 -128~127
int(整型) 2字节 -32768~32767
float(单精度浮点型) 4字节 约精确到6位数
double(双精度浮点型) 8字节 约精确到12位数
void(空值型) 0字节 无值

由于硬件平台和操作系统的不同,数据类型的字长可能与上表不同。例如,运行在AMD64架构的Linux系统中,整型的长度为 4 字节。要获得当前系统环境中数据类型的字长,可运行下列程序。

#include <stdio.h>

int main()
{
printf("字符型字长为%d\n", sizeof(char));
printf("整型字长为%d\n", sizeof(int));
printf("长整型字长为%d\n", sizeof(long));
printf("单精度浮点型字长为%d\n", sizeof(float));
printf("双精度浮点型字长为%d\n", sizeof(double)); return 0;
}

输出:

字符型字长为 1
整型字长为 4
长整型字长为 8
单精度浮点型字长为 4
双精度浮点型字长为 8

该程序使用 sizeof() 函数返回数据类型的字长,sizeof()函数的返回值为整型数据 ,返回的结果由printf()函数输出到终端中。

2.1.2 聚合类型与修饰符

C语言支持聚合类型,包括数组、指针、结构体、公用体(联合)、位域和枚举。聚合类型构成了复杂的数据结构,用以描述事物的各种属性。除 void类型 外,基本类型的前面可以有各种修饰符。修饰符用来改变
基本类型的意义,以便更准确地适应各种情况的需求。修饰符如下:

  • signed(有符号);
  • unsigned(无符号);
  • short(短型);
  • long(长型);

signed、unsigned、short、long 修饰符适用于 字符 和 整数 两种基本类型,而 long 还可以用于 double 。unsigned 和 signed 修饰符分别表示 无正负值符号有正负值符号 的数据类型中,
计算机中原始数据类型使用的是二进制数,如果要表示正负值符号则需要用1位存储空间。以字符型为例,无符号字符型取值值域为 2的8次方,那么范围为 0~255,有符号字符型将1位用于存储符号,取值值域为 2的7次方,那么范围为 -128~127。下表给出所有根据 ANSI C 标准而组合的类型、字长和范围。

ANSI C标准组合的类型、字长和范围
类型 字长 范围
char(字符型) 1字节 -128~127
unsigned char(无符号字符型) 1字节 0~255
signed char(有符号字符型) 1字节 -128~127
int(整型) 2字节 -32 768~32 767
unsigned int(无符号整型) 2字节 0~65 535
signed int(有符号整型) 2字节 -32 768~32 767
short int(短整型) 1字节 -128~127
unsigned short int(无符短整型) 1字节 0~255
signed short int(有符号短整型) 1字节 -128~127
long int(长整型) 4字节 -2 147 483 648~2 147 483 647
unsigned long int(无符号长整型) 4字节 0~4 294 967 296
signed long int(有符号长整型) 4字节 -2 147 483 648~2 147 483 647
float(单精度浮点型) 4字节 约精确到 6 位数
double(双精度浮点型) 8字节 约精确到 12 位数
void(空值型) 0字节 无值

因为数据类型的默认定义是有符号数,所以 signed修饰符通常可省略。某些编译器允许将unsigned用于浮点型,如 unsigned double。但这一用法降低了程序的可移植性,故建议一般不要采用。为了使用方便,GCC编译程序允许使用整型的简写形式:short int 表示 short,即 int 可省略。

注意:表示正数时,最大能表示的值总是比值域少 1,这是因为将 0 作为正数看待,0占用了一个取值空间。

【C语言入门教程】2.1 数据类型(5种基本数据类型),聚合类型与修饰符的更多相关文章

  1. 【C语言入门教程】目录/大纲

    第一章 C语言编程基础 1.1 基本程序结构 1.2 函数库 和 链接 1.3 C语言“32个”关键字 第二章 数据类型.运算符和表达式 2.1 数据类型(5种基本数据类型),聚合类型与修饰符 2.2 ...

  2. 《JavaScript语言入门教程》记录整理:入门和数据类型

    目录 入门篇 js介绍 历史 基本语法 数据类型 概述 null 和 undefined 数值 字符串 对象 函数 数组 本系列基于阮一峰老师的<JavaScrip语言入门教程>或< ...

  3. 《Ruby语言入门教程v1.0》学习笔记-01

    <Ruby语言入门教程v1.0> 编著:张开川 邮箱:kaichuan_zhang@126.com 想要学习ruby是因为公司的自动化测试使用到了ruby语言,但是公司关于ruby只给了一 ...

  4. 《JavaScript语言入门教程》记录整理:运算符、语法和标准库

    目录 运算符 算数运算符 比较运算符 布尔运算符 二进制位运算符 void和逗号运算符 运算顺序 语法 数据类型的转换 错误处理机制 编程风格 console对象和控制台 标准库 Object对象 属 ...

  5. C语言入门教程-(5)格式化输入输出

    1.输入和输出 在程序的使用中,我们经常可以看的这么一个场景:用户需要输入数据,经过程序运算,得到结果后输出.在C语言中,输入数据和输出数据都是由库函数完成的,通过语句来输入/输出. 2.格式化输出— ...

  6. Go语言入门教程(十)之函数

    Hello 各位小伙伴大家好,我是小栈君,假期一眨眼就过去了.不知道大家玩的是否开心呢? 上次我们讲到了关于Go语言的流程控制,小栈君也希望小伙伴跟着小栈君一步一个脚印的敲一下代码,相互进步.本期我们 ...

  7. c语言该怎么入门?C语言入门教程(非常详细)

    C语言是一门面向过程的编译型语言,它的运行速度极快,仅次于汇编语言.C语言是计算机产业的核心语言,操作系统.硬件驱动.关键组件.数据库等都离不开C语言:不学习C语言,就不能了解计算机底层. 这套「C语 ...

  8. 《JavaScript语言入门教程》记录整理:面向对象

    目录 面向对象编程 实例对象与 new 命令 this关键字 对象的继承 Object对象的方法 严格模式(strict mode) 本系列基于阮一峰老师的<JavaScrip语言入门教程> ...

  9. Go 语言入门教程,共32讲,6小时(已完结)

    Go语言入门教程,共32讲,6小时(完结) 在B站:https://www.bilibili.com/video/BV1fD4y1m7TD/

随机推荐

  1. Beta版本冲刺第一天 12.5

    一.站立式会议照片: 二.项目燃尽图: 三.项目进展: 成 员 前段时间完成任务 今天完成任务 明天要做任务 问题困难 心得体会 胡泽善 对Alpha版本的分析总结,学习新技术,对Beta版本的讨论规 ...

  2. Linux 下解压大全

    .tar 解包:tar xvf FileName.tar 或 tar zxvf FilenName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!) ...

  3. linux中配置NTP基本操作

    计算机的系统时间是由计算机内的石英晶体震荡电路以固定的震荡频率产生的date 查看当前时区vim /etc/sysconfig/clock  修改时区配置文件ZONE="America/Ne ...

  4. 高性能JavaScript笔记三(编程实践)

    避免双重求值 有四个标准函数可以允许你传入代码的字符串,然后它才你动态执行.它们分别是:eval.Function.setTimeout.setInterval 事实上当你在javascript代码中 ...

  5. linux认识第一面

    一.领域问题: 在客户端领域,windows始终占据了优势地位.而在服务器领域,全球98%的都是在用linux.因为linux作为服务器的载体,便宜又安全. 二.linux是基于内核的编写工具,在li ...

  6. vmware下linux系统的安装过程

    虚拟机VMware下CentOS6.6安装教程图文详解 [日期:2016-05-24] 来源:Linux社区  作者:Sungeek [字体:大 中 小]   分享下,虚拟机VMware下CentOS ...

  7. nginx查看安装了哪些模块

    查看安装了哪些模块命令: [root@RG-PowerCache-X xcache]# nginx/sbin/nginx -Vnginx version: nginx/1.2.3built by gc ...

  8. 中缀表达式转后缀表达式(用于求字符串表达式值)(js栈和队列的实现是通过数组的push和unshift方法插值,pop方法取值)

    中缀表达式:就是我通常用的算术或逻辑公式: 后缀表达式:不包含括号,运算符放在两个运算对象后面,所有的计算按运算符出现的顺序,严格从左向右进行,不用考虑运算符优先级: 如,(2+1)*3 转换后,2 ...

  9. Java数据结构——用链表实现栈

    //================================================= // File Name : LinkStack_demo //---------------- ...

  10. Java——UDP

    import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; //===== ...