《跟着星仔学C语言》第二章 类型、运算符与表达式

02_0100 2.1变量名 2.2数据类型及长度

2.1变量名/函数名
    1.字母(含_)与数字组成的序列
    2.不建议把_作为变量或者函数开头(可能会和编译器冲突,以微软的_strlwr函数举例)
2.2数据类型及长度
    signed与unsigned
        char, short, int, long有signed与unsigned
        float与double没有signed与unsigned

    讲解数的表示
        计算机中的数都是用补码表示
        如何算补码:
            正数
                正整数的补码是其二进制表示,与原码相同.
            负数
                求负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1。


代码:http://q1024.com/p/item.php?u=krc
视频:https://www.bilibili.com/video/BV12L4y1Y76R?p=16

02_0200 2.3常量

2.3常量
2.3.1 数字常量
数据类型        VS表示方法        LINUX表示方法        宏定义
long        L        L        LONG_MAX
unsigned long        UL        UL        ULONG_MAX
long long        i64/LL        LL        LLONG_MAX
unsigned long long        ui64/ULL        ULL        ULLONG_MAX
float        f        f        FLT_MIN
double        无        无        DBL_MAX
2.3.2 八进制/十六进制
8进制数用0开始 linux下的权限多用这种方式表述
16进制用0x开始
2.3.3 ASCII码及字符转义
1.什么是ASCII码
    答:简单的说,就是一张表,用于表示一个数字和一个字符的一一对应关系

2.3.4 C语言转义字符

2.3.5 常量表达式
#define MAXLINE 1000
char line[MAXLINE + 1];
2.3.6 字符串常量
"hello,world"
"hello," " world"
"hello"\
" world"

重点,字符串常量不可以修改!!!
2.3.7 enum 常量
1.enum占用几个字节?
2.enum会检查重复吗? #define会检查吗?

代码:http://q1024.com/p/item.php?u=krc
视频:https://www.bilibili.com/video/BV12L4y1Y76R?p=17

02_0300 2.4声明 2.5算术运算符 2.6关系运算符与逻辑运算符


2.4声明
    1.先声明再赋值/声明时赋值
    2.如果不是自动变量,则只进行一次初始化.默认情况下,外部变量与静态变量被初始化为0
2.4.1 全局/静态变量的初始化
    1.如果初始化为0,编译后的大小不会增加,证明初始化为0,编译器采用了简单的方法标识为初始化为0
    2.如果初始化为其他值,编译后的大小会增加,初始化的内容直接放在exe里面
    3.不使用的静态变量可能会被编译器优化掉,具体看编译器的实现
    总结:C语言中,全局变量/静态变量在程序执行前已经初始化
2.4.2 const限定修饰

2.5算术运算符
    +,-,*,/,%
2.6关系运算符与逻辑运算符
    > >= < <= == !=
逻辑非运算符!的作用是将非0操作数转换为0,将操作数0转换为1
    int getline(char s[], int len)


代码:http://q1024.com/p/item.php?u=krc
视频:https://www.bilibili.com/video/BV12L4y1Y76R?p=18

02_0400 2.7类型转换 

2.7类型转换
2.7.1 数字运算时自动转换
1.VS中,int 向下转到char/short等并不会出编译警告
  GCC干脆就不给警告?

2.有符号与无符号比较时的警告
2.7.2有符号和无符号比较时的自动转换
我的理解,自动转换为无符号数
2.7.2 赋值自动转换

2.7.3 函数传参自动转换

2.7.4 强制转换

2.7.5 转换表
         char        short        int        long        long long        float        double
char                                                               
short                                                               
int                                                               
long                                                               
long long                                                               
float                                                               
double                                                               
2.7.5字符串转换
1.字符串转数字
2.字符转大小写
3.判断是不是数字

代码:http://q1024.com/p/item.php?u=krc
视频:https://www.bilibili.com/video/BV12L4y1Y76R?p=19

02_0500 2.8自增运算符与自减运算符

2.8自增运算符与自减运算符
2.7.1 自增自减的本质论(从汇编语言看起)

2.7.2 练习squeeze和any函数
如何优化?

代码:http://q1024.com/p/item.php?u=krc
视频:https://www.bilibili.com/video/BV12L4y1Y76R?p=20

02_0600 2.9按位运算符

2.9按位运算符
2.9.1 C语言提供了6种操作运算符供整数操作
1.&   |   ^  <<  >>   ~
2.最简单的加密算法
真值表
&        0        1
0        0        0
1        0        1

|        0        1
0        0        1
1        1        1

^        0        1
0        0        1
1        1        0

~        0        1
         1        0

2.9.2 算术移位与逻辑移位

2.9.3 与机器字长无关的写法

代码:http://q1024.com/p/item.php?u=krc
视频:https://www.bilibili.com/video/BV12L4y1Y76R?p=21

02_0700 2.10 赋值运算符与表达式 2.11 条件表达式 2.12 运算符优先级与求值次序

2.10 赋值运算符与表达式
expr1 op= expr2 等价于 expr1 = (expr1) op (expr2)
2.11 条件表达式
(n > 0) ? f : n 是浮点类型,与n是否大于0无关
2.12 运算符优先级与求值次序
x = f() + g(); 没有规定f和g的运行顺序
printf("%d %d\n", ++n, power(2, n)); 没有规定先计算++n还是power
a[ i ] = i++ //让人不愉快的代码书写
代码:http://q1024.com/p/item.php?u=krc
视频:https://www.bilibili.com/video/BV12L4y1Y76R?p=22

 

posted @ 2022-09-06 21:07  xingzaicpp  阅读(53)  评论(0编辑  收藏  举报