嵌入式学习之路 3

一、对转义字符的学习和使用

        C允许用一种特殊形式的字符常量,就是以一个字符 "\"开头的字符序列。例如,前面已经遇到过的,在 printf函数中的"\ n"' 它代表一个“换 行”符。这是一种“控制字符"'在屏幕上是不能显示的,在程序中也无法用一个一般形式 的字符表示,只能采用特殊形式来表示。表中列出的字符称为“转义字符”,意思是将反斜杠"\"后面的字符转换成另外的意义。

eg:printf("abc\tij#k\n"); :输出 abc     ij#k ( \t 制表符使 ij#k 向右移动8个字符的位置, \n 换行)

二、算数运算

1、运算符

基本的算术运算符:

+(加法运算符,或正值运算符,如 3+5+3);

-   (减法运算符,或负值运算符,如 5-2-3);

*   (乘法运算符,如 3* 5);

/    (除法运算符,如 5/3);

 (1).如果是两个整型数相除,此时相当于是整除的效果 
 (2).除法运算中 除数不能为 0

%  (模运算符,或称求余运算符,%两侧均应为整型数据,如 7%4 的值为 3);

    (1).取余运算除数不能为0
    (2).求余运算,运算数不能是小数。必须是整数

        取余运算一般可以用来判断一个整数的奇偶性,整数对2取余数,余数为0是偶数,余数为1是奇数。

2、自增、自减运算符

作用是使变量的值增 或减 1, 例如:

++i, --i(在使用i之前,先使i的值加(减) 1)

i++, i--(在使用i之后,使i的值加(减) 1)

要注意的是:

    1. a++ 、++a如果单独使用,效果上没有区别
    2. 先用后加或先加后用,是参与到别的运算中时,才发挥作用
    3. 运算数,必须是一个可修改变量 

3、优先级和结合性

优先级 --- 不同优先级的运算在混合运算时,高优先级的先结合 
结合性 --- 同一优先级的运算在混合运算时,按照结合性进行结合。

4、隐式类型转换

        整形(int, short, long)和浮点型(fioat, double)和字符型数据间是可以混合运算的

例如:10+'a'+1.5-87.12*'b'是合法的,在进行运算时,不同类型的数据要先转换成同一类型,然后再进行计算,转换规则遵循下图

  从右向左 --- 必转 
  从下向上 --- 低精度向高精度转  

5、左值、右值

        左值是指可以出现在赋值运算符左边的表达式,它表示一个具有内存地址的对象,可以被修改。变量就是左值,因为它们可以被赋值。左值是可定位的,可以通过取地址运算符 & 获取其内存地址;右值是不可定位的,通常是常量或表达式的结果。

int a;
a = 10; 
int b;
b = a; 

其中a和b都是左值。

        右值是指只能出现在赋值运算符右边的表达式,它通常表示一个值或一个临时对象,不能被修改。常量就是右值,因为它们的值不能被改变。

上边例子中10就是右值,被赋值给左值a。

        当使用 const 关键字修饰变量时,该变量就变成了只读的常量,虽然它在本质上还是个变量,但不能被修改。

const int a = 10; // a 是一个常量左值,不能被修改

6、赋值运算

        赋值符号"="就是赋值运算符,它的作用是将一个数据赋给一个变量。如 "a= 3" 的作用是执行一次赋值操作(或称赋值运算)。把常量3赋给变量a。也可以将一个表达式的值赋给一个变量。

int a;
a = 10; //赋值运算 
        //赋值表达式
        //结果 就是a的值 
        //类型 就是a的类型 

a=b=c=10  //可以连续赋值 

+= //赋值运算:

a += 1 // a = (a + 1)
a -= 1 // a = a - 1

1. 高精度到低精度的赋值:
        当将一个高精度的数据(如 double 或 float )赋给一个低精度的变量(如整型)时,会发生精度丢失。例如, int a; a = 1.23; ,此时 a 的值将为1,小数部分被截断。
2. 低精度到高精度的赋值:
        当将一个低精度的数据(如整型)赋给一个高精度的变量(如 double 或 float )时,不会发生数据丢失,低精度数据会被扩展为高精度的数据。
3. 长类型到短类型的赋值:
        当将一个长类型的数据赋给一个短类型的变量时,会发生高位截断。例如,将一个 int 类型的值赋给一个 short 类型的变量,如果 int 类型的值超出了 short 类型的表示范围,高位部分将被截断。
4. 短类型到长类型的赋值:
        当将一个短类型的数据赋给一个长类型的变量时,需要根据短类型是否有符号来进行处理。
        如果短类型是无符号的,那么在扩展到长类型时,高位会补0。
        如果短类型是有符号的,那么在扩展到长类型时,高位会补符号位。

例如:

int a = 12345;
short b = (short)a; // 高位截断,b 的值可能会因截断而发生变化
long c = b; // 有符号短类型到长类型,符号位扩展
unsigned short d = 65535;
int e = d; // 无符号短类型到长类型,高位补0

总结:
   高精度 => 低精度   --- 精度丢失 
   长类型 => 短类型   --- 高位截断 
   短类型 => 长类型   --- 短类型是否有符号  
                      无符号 ---补0
                      有符号 ---符号位扩展

7、逗号运算(顺序求值运算符):

语法:表达式1,表达式2,表达式3, ...,表达式n 

逗号运算的过程:1+2,a++,3+4 ......从左到右,依次运算 
逗号运算表达式的结是整个式子中最后一个表达式运算的结果  
逗号运算有时会用在for循环中,for(sum = 0,i =0,j = 0;2;3)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值