美文网首页
读书笔记之C Primer Plus 2

读书笔记之C Primer Plus 2

作者: 余很多之很多code | 来源:发表于2022-11-12 10:55 被阅读0次

    为什么阅读《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这样的概念了。

    相关文章

      网友评论

          本文标题:读书笔记之C Primer Plus 2

          本文链接:https://www.haomeiwen.com/subject/fnphxdtx.html