为什么阅读《C Primer Plus》第六版
准备好好研究下redis源码,但是很久没用c语言写代码了,平时工作主要用java和js。
所以准备重新阅读学习下c语言经典书籍:C Primer Plus。
更好的阅读redis源码。
读书笔记
第3章 数据和C
程序离不开数据
/* platinum.c -- your weight in platinum */
#include <stdio.h>
int main(void)
{
float weight; /* 你的体重 */
float value; /* 相等重量的白金价值 */
printf("Are you worth your weight in platinum?\n");
printf("Let's check it out.\n");
printf("Please enter your weight in pounds: ");
/* 获取用户的输入 */
scanf("%f", &weight);
/* 假设白金的价格是每盎司$1700 */
/* 14.5833用于把英磅常衡盎司转换为金衡盎司[1]*/
value = 1700.0 * weight * 14.5833;
printf("Your weight in platinum is worth $%.2f.\n", value);
printf("You are easily worth that! If platinum prices drop,\n");
printf("eat more to maintain your value.\n");
return 0;
}
运行输出
Are you worth your weight in platinum?
Let's check it out.
Please enter your weight in pounds: 156
Your weight in platinum is worth $3867491.25.
You are easily worth that! If platinum prices drop,
eat more to maintain your value.
- 本例使用了浮点数类型float变量
- 其中%f处理浮点值, %.2f 指定输出的浮点数只显示小数点后面两位
- scanf("%f", &weight);->scanf()函数读取用户从键盘输入的值, 赋值给weight
基本数据类型
计算机存储的两大基本类型: 整数类型和浮点数类型
现在许多cpu都包含浮点处理器,缩小了浮点运算和整数运算的速度差距。
位、字节和字
- 位: 最小的存储单位是位(bit),可以存储0或1,位是计算机内存的基本构件块。
- 字节: 几乎所有的机器1字节=8位。
- 字: 设计计算机时给定的自然存储单位。对于早期8位的微型计算机,1个字长只有8位,现在普遍是64位。
计算机的字长越大,其数据移动越快,允许的内存访问也更多,32位最大内存限制是4096。
整数7二进制是111,在8位字节中存储:00000111。
其他整数类型:
- short int(简写为short) 常用于较小数值的场合以节省空间。
- long int或者long 占用的存储空间可能比int多,适用于较大数值的场合。
- long long int或者long long 适用于更大数值场合,至少占用64位。
- unsigned int或unsigned 只用于非负值的场合。16位unsigned允许的取值范围0~65535。
整数溢出是未定义的行为,需要小心溢出。
- %d int和long都可以用
- %lx 以十六进制格式打印long类型整数
- %lo 以八进制格式打印long类型整数
- %hd 以十进制显示short类型的整数
- %ho 以八进制显示short类型的整数
- %lu 打印unsigned long类型的值
- %lld 打印long long类型的值
- %llu 打印unsigned long long类型的值
char
char类型用于储存字符,但是从技术层面看,char是整数类型。
因为char类型实际上存储的是整数而不是字符。计算机使用数字编码来处理字符。
C语言把1字节定义为char类型占用的位数,因此无论16位还是32位系统,都可以使用char类型。
- char类型声明 char itable
- 字符常量和初始化 char itable = 'A';
char itable=65,对于ASCII,这样做没问题,但是不是一种好的编码风格。
char nerf = '\n' 打印变量效果是:另起一行。
转义序列
转义序列 | 含义 |
---|---|
\a | 警报 |
\b | 退格 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直指标符 |
\\ | 反斜杠 |
\' | 单引号 |
\" | 双引号 |
\? | 问号 |
\Ooo | 八机制oo必须是有效的八机制数 |
\xhh | 十六进制,hh必须是有效的十六进制数 |
打印字符
printf()函数用%c指明待打印的字符。
如果用%d来打印char类型变量,将会打印的是一个整数。
signed/unsigned char
C语言允许在关键字char前面使用signed或unsigned。这样无论编译器默认char是什么类型,
signed char表示有符号类型,而unsinged char表示无符号类型。char类型处理小整数时很有用。
如果只处理字符,无需使用任何修饰符
yups: java程序员大手大脚惯了,都没了signed/unsigned这样的概念了。
网友评论