目录

前文列表

程序编译流程与 GCC 编译器

C 语言编程 — 基本语法

数据类型

数据类型,即数据对象的类型,是编程语言的基石。自编程语言发明以来,数据类型就已经存在,其最初的目的就是为了能够让程序更加充分的利用稀缺的内存空间。

在硬件行业严格遵守摩尔定律发展了多年后的今天,开发者得以享受充足内存资源,同时,数据类型也被赋予了更深厚的含义:

  • 确定数据对象占用的内存空间大小
  • 确定数据对象的数值范围
  • 规定数据对象所能进行的操作(行为)

例如:基本整型数据对象占用 4 Bytes(32 Bits) 的内存空间, 数值范围是 0x0~0xFFFF FFFF,可以进行求余运算。需要注意的是,类型数据对象所占用的内存空间和数值范围,除了取决于 C 语言本身的常规定义之外,还可能会受到编译器的影响。

C 语言的数据类型可能是内建的,也可能是我们自定义的。

C 语言 4 大数据类型:

基本数据类型

数据类型用于声明不同类型的常量、变量或函数。变量的数据类型决定了变量占用的存储空间,以及如何解释存储的位模式。

基本类型是算术类型,包括:整数类型和浮点类型。

无符号数据类型与有符号数据类型的区别:

  • 占用相同的内存空间,但表示数值范围不同
  • 有符号和无符号仅可用于修饰整型或字符型数据对象

例如:若 unsigned char 和 signed char 都占用 1Byte 的内存空间。signed char 的数值范围为 [-128, 127],而 unsigned char 的数据范围为 [0, 255]。这是因为有符号数据类型数据的最高位被用作为符号位,而无符号的数据类型数据最高位被用作为数据位。

整型

  • 默认为 10 进制
  • 以 0 开头为 8 进制:045,021
  • 以 0b 开头为 2 进制:0b11101101
  • 以 0x 开头为 16 进制:0x21458adf

注意,各种类型的存储大小与操作系统 CPU 的位数是有关系的。可以使用 sizeof 运算符来得到某个类型或某个变量在特定平台上的准确大小。

#include <stdio.h>

int main() {
printf("int: %lu \n", sizeof(int));
return 0;
}
  • stdio.h:输入输出标准库,声明了 printf 标准函数
  • %lu:为 32 位无符号整数。
  • sizeof:C 语言运算符,计算数据类型或变量长度(即:所占字节数)

运行:

$ gcc -Wall main.c -o main

$ ./main
int: 4

浮点型

下表列出了关于标准浮点类型的存储大小、值范围和精度的细节:

  • 单精度常量:2.3f
  • (默认)双精度常量:2.3
#include <stdio.h>
#include <float.h> int main(){
printf("float byte: %lu \n", sizeof(float));
printf("float MIN: %E \n", FLT_MIN);
printf("float MAX: %E \n", FLT_MAX);
printf("float DIG: %d \n", FLT_DIG); return 0;
}
  • float.h:定义了浮点数相关的宏,e.g. FLT_MIN、FLT_MAX 等。
  • %E:以指数形式输出单、双精度实数。

运行:

$ ./main
float byte: 4
float MIN: 1.175494E-38
float MAX: 3.402823E+38
float DIG: 6

C 语言编程 — 基本数据类型的更多相关文章

  1. R语言编程艺术# 数据类型向量(vector)

    R语言最基本的数据类型-向量(vector) 1.插入向量元素,同一向量中的所有的元素必须是相同的模式(数据类型),如整型.数值型(浮点数).字符型(字符串).逻辑型.复数型等.查看变量的类型可以用t ...

  2. C语言编程入门之--第四章C语言基本数据类型

      导读:C语言程序中经常涉及一些数学计算,所以要熟悉其基本的数据类型.数据类型学习起来比较枯燥,不过结合之前的内存概念,以及本节的字节概念,相信数据类型也就不难理解了.本章从二进制的基本概念开始,然 ...

  3. Go 语言的基本数据类型

    Go 语言的基本数据类型 0)变量声明 var 变量名字 类型 = 表达式 例: 其中“类型”或“= 表达式”两个部分可以省略其中的一个. 1)根据初始化表达式来推导类型信息 2)默认值初始化为0. ...

  4. 第二章 C语言编程实践

    上章回顾 宏定义特点和注意细节 条件编译特点和主要用处 文件包含的路径查询规则 C语言扩展宏定义的用法 第二章 第二章 C语言编程实践 C语言编程实践 预习检查 异或的运算符是什么 宏定义最主要的特点 ...

  5. 华为C语言编程规范

    DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd ...

  6. linux 操作系统下c语言编程入门

    2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门--时间概念 5)Linux程序设计入门--信号处理 6)Linux程序设计入门--消息管理  ...

  7. 采访:Go语言编程

    Go语言是由Google在2009年11月份公布的,它的目标是要应对软件开发所面临的最新挑战.Go语言特别被设计为快速(包括在编译时).支持多核的语言,并且兼顾了动态语言的简单性和静态类型语言的安全性 ...

  8. MySQL的C语言编程(一)

    原文:MySQL的C语言编程(一) 初学MySQL,记录一下MySQL用c语言编程时遇到的问题. 这是我的源程序: int main(void) { MYSQL *mysql=NULL; if((my ...

  9. R语言编程艺术(2)R中的数据结构

    本文对应<R语言编程艺术>第2章:向量:第3章:矩阵和数组:第4章:列表:第5章:数据框:第6章:因子和表 ======================================== ...

  10. Go 语言编程

    [课程名称]Go 语言编程   [课程时间]2014年7月30日(周三) 20:50 - 22:00         [课程安排]20:50-21:00     通过邮件地址登录网络课堂       ...

随机推荐

  1. SSL新年欢乐赛暨BPM退役赛(不含FK)

    目录 前言 C 大水题 题目 分析 代码 D 简单数据结构题 题目 分析 代码 H 上次题 题目 分析 代码 J 白给题 题目 分析 代码 前言 A,B水题,E,I原题 实际赛时400分(乐多毁我青春 ...

  2. PriorityQueue和PriorityBlockingQueue

    目录 简介 PriorityQueue PriorityBlockingQueue PriorityQueue和PriorityBlockingQueue 简介 Queue一般来说都是FIFO的,当然 ...

  3. 本周四晚19:00知识赋能第4期直播丨OpenHarmony智能家居项目之设备控制实现

    OpenAtom OpenHarmony(以下简称"OpenHarmony")开源开发者成长计划项目自 2021 年 10 月 24 日上线以来,在开发者中引发高度关注. 成长计划 ...

  4. 对OpenHarmony中LiteOS的内核分析——超时原理和应用

    前言 在软件世界里面,超时是一个非常重要的概念.比如 ● 当前线程暂时休眠1秒钟,休眠结束后继续执行 ● 每5秒钟采集一下CPU利用率 ● 数据发送失败,2秒钟以后再试一试 ● 等待某种数据,但最多等 ...

  5. innoSetup打包文件编写模板

    现在打包主要是使用 innosetup 这个软件来进行打包,支持录制脚本和手动编写脚本,比较好用. 此文章主要记录手写脚本,便于后期查询,借鉴. 文档: inno setup :https://blo ...

  6. css实现带背景颜色的小三角

    <div id="first"> <p>带背景颜色的小三角实现是比较简单的</p> <span id="top"> ...

  7. java excel关联导入数据格式为一对多

    java excel关联导入数据格式为一对多 java 表格读取时一行一行的读取 将每行数据放入list  根据 list.stream().filter(m->m.getCode().equa ...

  8. WAF 原理入门

    WAF 入门 WAF 功能 WAF 全称叫 Web Application Firewall,和传统防火墙的区别是,它是工作在应用层的防火墙,主要对 web 请求/响应进行防护.那么 WAF 有什么功 ...

  9. 从零开始写 Docker(十一)---实现 mydocker exec 进入容器内部

    本文为从零开始写 Docker 系列第十一篇,实现类似 docker exec 的功能,使得我们能够进入到指定容器内部. 完整代码见:https://github.com/lixd/mydocker ...

  10. 禅道统计BUG解决时长过滤节假日和跨天问题

    之前发过禅道的各种数据统计报表,使用过程中优化了一些,反映最多的是项目bug的解决时长统计问题: 1.比如当天下班左右提交的bug,研发第二天来解决,晚上这段时间应该去掉,不应计算在内 2.节假日.周 ...