• 读书笔记之C Primer Plus 2


    为什么阅读《C Primer Plus》第六版

    准备好好研究下redis源码,但是很久没用c语言写代码了,平时工作主要用java和js。
    所以准备重新阅读学习下c语言经典书籍:C Primer Plus。
    更好的阅读redis源码。


    读书笔记

    第3章 数据和C

    程序离不开数据

    /* platinum.c  -- your weight in platinum */
    #include 
    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    运行输出

    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.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 本例使用了浮点数类型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这样的概念了。

  • 相关阅读:
    Mysql5.7开启SSL认证且支持Springboot客户端验证
    kubeadm安装k8s高可用集群
    vue3组件通信
    将asp.net core程序部署到Linux服务器上(2)---以守护进程方式
    【MySQL】读写分离&主从复制
    Qt6 使用 QTreeWidget 控件输出进程树
    InnoDB存储引擎存储结构详解-实战篇
    SaaS企业如何逐步进化与组织适配的销售力?
    靶向抗体偶联药物 (ADC)——抗肿瘤
    【计算机网络系列】数据链路层③:使用广播信道的数据链路层(CSMA/CD协议和以太网的MAC帧)
  • 原文地址:https://blog.csdn.net/yuoveyu/article/details/127829652