avatar

刘刚刚的blog

采菊东篱下,悠然见南山🦥

  • 首页
  • 大模型应用
  • 常用软件/工具
  • Halo
  • 关于
Home 第3章 数据和 C
文章

第3章 数据和 C

Posted 2024-01-4 Updated 2024-01- 4
By Administrator
21~27 min read

这是在读本书时,遇到的第一章满满的干货(🤪可能后边每一章都是这样),看到一半甚至都想草草看完简单做点笔记结束,但是想到自己学习 C语言的目地是为了阅读 redis的源码。在 redis中,对于数据的存储时类型的选择,非常的高效、紧凑,学完这一章,可以有更扎实的理解,因此还是仔细看了 2 遍,然后才动手写的笔记。

本章介绍了 C语言中的基础数据类型,内容比较细致。

C语言种数据类型的关键字

K&R给出的关键字

C90添加的

C99添加的

int

signed

_Bool

long

void

_Complex

short

_Imaginary

unsigned

char

float

double

不同进制下的数字输出

10进制

8进制

16进制

前缀符号

0

0x或0X

不带符号输出

%d

%o

%x

带符号输出

%#o

%#x

后缀

long

long long

unsigned

后缀

l或者L

ll或者LL

u或者U,与long一块可以组成 lu,ul,UL等

整型

在不同的机器上,相同的整数类型占用的位数可能不同。C标准只规定了不同数据类型允许的最小大小:

类型

最小范围

备注

short、int

32767~32767

3万

long

-2147483648~2147483648

21亿

unsigned short,unsigned int

0-65535

6万

unsigned long

0~4294967295

42亿

long long

9后边18位数字(9百亿亿)

unsigned long long

18后边18位数字

打印不同类型的数字

类型

转换方式

short

%h

int

%d

unsigned int

%u

long

%ld

long long

%lld

unsigned long

%llu

char

在C语言中,用单引号括起来的单个字符被称为字符常量(char),双引号括起来的为字符串。在系统层面char是整数类型,char类型实际存储的为整数而不是字符。在有的编译器中将char实现为有符号类型,有的编译器种实现为无符号类型。C90开始,可以使用signed、unsigned来修饰char.

以下是一个打印char变量两种方式的示例:

char ch;
ch = 'A';
printf("The code for %c is %d.\n",ch,ch)

_Bool(C99)

布尔类型,即true,false。内部也是一种整数类型,只占用1位存储空间。

可移植类型:stdin.h和inttypes.h(C99)

因为C语言中部分类型在不同系统中的功能不一样,因此C99增加了一些类型,以确保C语言的类型在各个系统中的功能相同。

意思

示例

精确宽度类型

方便统一在不同位数的操作系统中的数据类型长度

int32_t

最小宽度类型

当计算机底层系统不支持精确宽度类型时使用

int_least8_t

最快最小宽度类型

当更关心速度而非空间时使用

int_fast8_t

最大整型

系统的最大整数类型

intmax_t 有符号整数类型

uintmax_t 无符号整数类型

总结:

浮点数:分为float、double、long double。c语言中的浮点数包括数字部分和整数部分,可以省略其中一个。浮点数存在上溢(超出可表示类型的最大数)和下溢(超出可表示的最大精度,导致部分小数丢失)的情况。

复数和虚数:C99开始支持,C11将整个复数软件包作为可选项。

类型的大小:使用sizeof可以查看指定类型的大小,用%zd输出

使用数据类型:初始化变量时,应使用与变量类型相符的常数类型。在定义变量名时,可以在变量名中体现其类型,比如 i_、us_ 前缀。

参数与陷阱:printf()、scanf()支持多个参数的传入,如果传入错误数量的参数,编译器可能会捕获不到对应的错误。

刷新输出:printf()会将输出发送到缓冲区。当从缓冲区显示到屏幕或者发送到文件时成为刷新缓冲区。c标准规定的刷新缓冲区的时机:缓冲区满、遇到换行字符、需要输入时。使用ffflush() 也可以刷新缓冲区。

在本章中,对于存储单位的理解比较吃力,在查阅的一些资料后,发现可能是因为对cpu、操作系统的了解不够,导致的。

在本章的学习过程中,因为工作原因,有近一个月的时间需要加班到比较晚。极大的影响到了学习进度。同时发现,想将笔记做好,需要花费的精力是学完的好几倍,因此决定本次重学C语言,只在每章学习完后,进行一个比较简单的学习总结。来提高学习效率,争取1月底看完本书。

License:  CC BY 4.0
Share

Further Reading

OLDER

第2章 C语言概述

NEWER

第4章 字符串和格式化输入\输出

Recently Updated

  • 文本切分-语义分割(Semantic Chunking)
  • dify 并发配置优化
  • Typing
  • 大模型返回中json_schema与json_mode的区别
  • Async

Trending Tags

Halo 运维 postgresql 设计模式 linux就该这么学 nas rag odoo python 文本切分

Contents

©2025 刘刚刚的blog. Some rights reserved.

Using the Halo theme Chirpy