嵌入式初学-C语言-三

数据类型转换

规则:不同的数据类型参与运算,需要转换为同一类型后运算

        数值比较由小到大简单排序:

隐式类型转换

说明:编译系统自动完成,一般是低优先级类型向高优先级类型转换,这种被称作自动类型转换 (由小到大)。

语法:大数据类型 变量名 = 小数据类型变量;

举例:

/ 案例1
char c = 'A';// 65
int num = c;
printf("%d",num); // 65
// 案例2
char c2 = 'A';// 65
int num2 = c2 + 22;
printf("%d",num2);// 87

强制类型转换

说明:程序员自己实现,一般是高优先级类型向低优先级类型转换,这种被称作强制类型转换(由 大到小)

语法:小数据类型 变量名 = (小数据类型)大数据类型变量;

举例:

// 案例1
int num1 = 65;
char c1 = (char)num1;
printf("%c",c1); // A
// 案例2
int num2 = 65;
char c2 = (char)(num2 + 32)
printf("%c",c2); // a

注意:强制类型转换过程中,可能会出现精度丢失的问题。如果大类型数据范围 小类型数据范围,此时丢失超出部分的 数据,精度会缺失!

原则:类型转换并不会改变原变量的类型。

运算符

算术运算符

单目运算符

说明: ++ -- +(正) -(负) *(解引用运算符)

++a与a++的区别

        int a = 1,int x = ++a; : ++ 在前,先自加1,后运算

        int a = 1,int x = a++; : ++ 在后,先运算,后自加1

案例:

总结: 分析上面的案例,我们发现,不管是 ++ 在前,还是 ++ 在后,计算数自身都会+1。区别在于运算的结 果不一样。 ++ 在前,先自加1,后运算; ++ 在后,先运算,后自加1。

--a与a--的区别

int a = 1,int x = --a; : -- 在前,先自减1,后运算

int a = 1,int x = a--; : ++ 在后,先运算,后自减1

双目运算符

说明: + - * / %

举例:

#include <stdio.h>
int main()
{
printf(3/2); // 1,为什么不是1.5,因为是整型的运算,会直接舍弃掉小数部分
printf(3*1.0/2); // 1.5 为什么是1.5? 3*1.0:转换为double
printf(10%3);// 1 求模运算
printf(10.0%3);// error 求模运算是针对整数进行的
int a = 10;
printf(a*1.0);
return 0;
}

注意:

1. 两个整数相除的结果是整数,小数部分被舍弃。要想其结果是实数,可在分子*1.0(隐式类型转换)

2. 求模运算(取余运算)左右两边的操作数都必须是整型。如果是类似于3.0这样的数,是错误的。

关系运算符

说明: > < >= <= != ==

案例:

什么是表达式?

  表达式就是表达某种意思的式子。在C语言中,表达式指的是 运算符 连接 操作数 (变量|常量...)的式 子。

注意:

由关系运算符构成的表达式称为关系表达式,关系表达式的值为boolean(布尔值)

        非0 :关系成立,为真

        0 :关系不成立,为假

逻辑运算符

说明: &&(与) ||(或) !(非)

        && :逻辑与(且),符号两边的操作数都为真,结果才为真。举例: ((5>4)&&(5-4)>1) ,结果 0

        || :逻辑或(或),符号两边的操作数只有有一个为真,结果就为真。举例: ((5>4)||(5- 4)>1) ,结果 1

        ! :逻辑反(取反),取反,非0为真,举例: !(!(5>4)) ,结果 1

惰性运算

所谓的惰性运算,就是减少运算次数。

        短路与: && 两边的操作数,只要左边不成立 0 ,直接返回假,不再校验右边。

        短路或: || 两边的操作数,只要左边成立 1 ,直接返回真,不再校验右边。

 扩展

ISO-8859-1:西欧编码,一般遇到直接改编码。针对文件内容。

GBK:国标,中国标准编码/字符库,收录了大量的汉字+中文符号。针对文件内容。

UTF-8:全球标准,几乎收录了全球的各种字符集,包括GBK包含的常用汉字以及中文符号。针对文件 内容。

ASCII:字符集,C语言字符就是以ASCII码进行存储。针对程序内部数据。

关于++混合操作,不同计算结果推理

第一种编译结果: i

nt i = 5;

int sum = (++i) + (++i)

             = 6 + 7

             = 13

第二种编译结果:

int i = 5;

int sum = (++i) + (++i)

             = 6 + 7

             = 7 + 7 前面的7是因为后面i的变化被影响后,重新赋值

             = 14

第一种编译结果:

int i = 5;

int sum = (++i)+(i++)

             = 6 + 6

             = 12

第二种编译结果:

int i = 5;

int sum = (++i)+(i++)

             = 6 + 6

             = 7 + 6 前面的7是因为后面i的变化被影响后,重新赋值

             = 13

注意:

算数运算符,运算结果是数值类型

关系运算符,运算结果是boolean类型(其实就是int的 0-假,非0-真)

逻辑运算符,运算结果是boolean类型(其实就是int的 0-假,非0-真)

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值