C语言-02-基本运算
一、算术运算
种类
1> 加(+),同时可以表示正号
2> 减(-),同时可以表示负号
3> 乘(*)
4>除(/)
5>取余(%)关于类型转换
1>自动类型转换
① char类型和short类型在运算时,要先自动转换为普通整型
② 参与运算的多个操作数,如果类型不一致,要先转换为操作数中最
高级别的类型
2>强制类型转换
① 将某种类型强制转换为其他某种类型
使用注意
1> 算术运算符都为双目运算符,存在左值和右值
2> 多个操作数参与运算,要进行自动类型转换(转换为最高级别),结果与转换后的类型一致
3> 除(/)运算符的右值不能为零
4> 取余(%)运算符的左值和右值必须是整数,且结果的正负性与左值一致
5> 算术运算符按优先级结合,同等优先级的运算顺序为从左到右关于算术运算符的示例(该博文中此示例后的示例,都使用代码块,可本示例的main函数中测试)
#include<stdio.h>
int main()
{
int a1 = 1;
int a2 = 2;
short a3 = 3;
int intResult;
float b1 = 1.1;
float b2 = 2.2;
float floatResult;
char c = 'c';
//自动类型提升
{
//a3提升为int类型
intResult = a1 + a3;
//c提升为int类型
intResult = a1 + c;
//a1提升为float类型
floatResult = a1 + b1;
}
//强制类型转换
{
//将a1强制转换为float类型,(提升类型)数值不变
floatResult = (float)a1;
//将b1强制转换为int类型,(降低类型)数值改变
intResult = (int)b1;
}
//关于除(/)运算符
{
//结果为整型的0
intResult = a1 / a2;
//结果为浮点型的0.5
floatResult = a1 / a2;
//编译时会有警告,警告信息为division by zero is undefined
//运行时会报错,错误信息为Floating point exception: 8
//且无法输出floatResult
floatResult = a1 / 0; }
//关于取余(%)运算符
{
//取余运算又称为模运算,结果为0
intResult = a1 & a2;
//编译时会报错
intResult = a1 & b1;
}
return 0;
}
二、赋值运算
1. 使用注意
1> 算术运算符为双目运算符,存在左值和右值
2> 结合性为从右到左
3> 常量不能作为复制运算符的左值
4> 赋值时,操作数的精确度不一样,可能会丢失精确度
2. 关于赋值运算符的示例(用代码块表示示例)
```
{
int a = 1;
int b = 2;
int intResult;
float d = 1.1;
float floatResult;
//现将常量10赋值给a,再赋值给b
b = a = 10;
//丢失精确度,值改变
intResult = d;
//不丢失精确度,值不变
floatResult = a;
//会报错,错误信息expression is not assignable,常量值不可以被改变
10 = a;
}
三、自增自减
种类
1> 自增(++),等价于 a += 1
2> 自减(- -),等价于a -= 1使用注意
1> ++a和a++区别:前者是在对a进行其他操作之前自增,后者是在之后
2>尽量避免出现a + - -b,因为结果依赖于求值顺序示例
//自增自减
{
int a = 0;
int b = 1;
int result; //复杂运算 结果为a = 1,b = 0,result = 1
result = a++ + (--b);
}
四、sizeof
1. 使用注意
1> sizeof(a),计算变量a(可以为变量或常量)在内存中所占的字节数,由a的类型决定
2> 若sizeof用于计算指针类型,无论该指针为何种类型,结果都为该编辑器中指针的长度
2. 示例
```
{
int a;
float b;
int count;
typedef struct
{
int c;
float d;
} Ptr;
Ptr *p;
//结果为4,为整型长度
count = sizeof(a);
//结果为4,为浮点型长度
count = sizeof(b);
//结果为8,为指针类型长度
count = sizeof(p);
}
五、关系运算
种类
1> >、>=
2> <、<=
3> !=、==使用注意
1> C语言中没有BOOL类型,用0表示假,非0表示真
2> 运算顺序为从左到右
3> 不要把与=弄混,会造成难以发现的错误,使用时,尽量把常量作为左值示例
{
int a = 1;
int b = 2;
int c = 3;
int d = 3;
int result; //验证运算顺序
result = a<=b>a;
printf("%d\n", result); //使用==时,将常量作为左值
if (1 == a)
{
; //空语句
}
}
六、逻辑运算
1. 种类
1> 或(||),参与运算的操作数,只要有一个为真,结果就为真
2> 与(&&),参与运算的操作数,只要有一个为假,结果就为假
3> 非(!),将原来的真假性改变为相对的真假性
2. 使用注意
1> 结合性从左到右
2> 或(||)运算符,只要左值中出现真值,就不再计算后边的表达式
3> 与(&&)运算符,只要左值中出现假值,就不再计算后边的表达式
3. 示例
```
{
int a = 0;
int b = 1;
int c = 2;
int result;
//或(||),结果为result = 1,c = 2
result = b || c++;
//与(&&),结果为result = 0,c = 2
result = a && ++c;
}
七、三目运算
使用注意
1> 为了程序的可读性,尽量不要使用嵌套
2> 可以转化为相应的if语句示例
{
int a = 1;
int b = 2;
int c = 3;
int result; //返回a、b中最大的值
result = a>b ? a : b; //嵌套使用,返回a、b、c最大的值,可读性差
result = (a>b ? a : b)>c ? (a>b ? a : b) : c;
printf("%d\n", result);
}
C语言-02-基本运算的更多相关文章
- C语言-02基本运算
1.除法运算 / 整数除于整数,还是整数.参与运算的操作数必须是同类型. 1/2的值是0.参与运算的操作数是什么类型,得出的值就是什么类型. 10.5 + 10将右边的10提升为了double类型 ...
- C语言02
C语言02 1.2 C语言与C程序 1.计算语言 语言发展 机器语言:机器语言是机器能直接识别的程序语言或指令代码,勿需经过翻译,每一操作码在计算机内部都有相应的电路来完成它,或指不经翻译即可为机器直 ...
- OC语言-02面向对象的三大特性
01封装 #import <Foundation/Foundation.h> @interface Student : NSObject { //@public 成员变量尽量不使用 int ...
- C语言 02 include
stdio.h h表示header file include"text.txt" 自己写的文件用双引号,系统自带文件用<>. 绝对路径用 / ,相对路径不带/
- C#语言-02.数据类型
a. 数据类型 i. 值类型:是一种由类型的实际值表示的数据类型,存储在栈内的存储空间中,由于编译器编译后将源代码中的值类型变量直接对应到唯一的存储空间上,直接访问该存储空间,故值类型的数据具有较快地 ...
- 算法实现c语言--02
从键盘上输入字符,将小写字母转换成大写字母.输入“ctl + z” 结束 . #include<stdio.h> #include<stdlib.h> //从键盘上输入字符,将 ...
- C#语言和数据库基础
第一章 第一个C#程序 Vs2012密钥 RBCXF-CVBGR-382MK-DFHJ4-C69G8 01..net和C#的区别 大概在2000年,微软推出了一种革命性的产品--.NET(战略) 目标 ...
- C#语言的基础
一.C#的引入 01..net和C#的区别 1)大概在2000年,微软推出了一种革命性的产品--.NET(战略) 目标:任何人,在任何地方,使用任何终端设备,都可以访问微软提供的服务. 2).net ...
- iOS学习路线图
一.iOS学习路线图 二.iOS学习路线图--视频篇 阶 段 学完后目标 知识点 配套学习资源(笔记+源码+PPT) 密码 基础阶段 学习周期:24天 学习后目标: ...
- c#前3章总结
01.net和c#的区别 大概在2000年,微软推出了一种革命性的产品--.NET(战略) 目标:任何人,在任何地方,使用任何终端设备,都可以访问微软提供的服务. .net Framework:要想让 ...
随机推荐
- webpack多页面开发与懒加载hash解决方案
之前讨论了webpack的hash与chunkhash的区别以及各自的应用场景,如果是常规单页面应用的话,上篇文章提供的方案是没有问题的.但是前端项目复杂多变,应对复杂多页面项目时,我们不得不继续踩w ...
- 为sourceinsight添加makefile、kconfig、*.S文件支持
转载:http://www.cnblogs.com/myblesh/articles/2452030.html 大家用source insight看linux源码的时候都遇到这么一个麻烦,make ...
- .NET 产品版权保护方案 (.NET源码加密保护) (转载)
说 明:你希望自己用.net辛辛苦苦做出来的软件被人轻易破解吗?你希望自己花了大量人力物力用.net开发出来的产品被竞争对手轻易获取核心代码吗?这是 一篇比较详尽地介绍如何保护自己的.net源代码的文 ...
- 【Git使用】强制推送代码到多个远程仓库
只吃了一个香蕉的晚上 一直预报的台风没有来,大盘也飘红了,世界好像变得越来越美好了似的.前两天,晚上下班坐地铁回家,靠在地铁门上看书,竟然坐到了终点站已全然不知,我也不知道我怎么了.怎么了.怎么了!最 ...
- 转载:第四弹!全球首个微信小程序(应用号)开发教程!通宵吐血赶稿,每日更新!
感谢大家支持!博卡君周末休息了两天,今天又回到战斗状态了.上周五晚上微信放出官方工具和教程了,推荐程序猿小伙伴们都去试一试,结合教程和代码,写写自己的 demo 也不错. 闲话不多说,开始更新! 第七 ...
- 如何转移数据库MDF和LDF文件
我们可以很轻易地使用SQL Server来创建一个数据库,创建的数据库实例将存储在指定的默认位置(不一定是C盘,可以手动变更默认存储位置).假设此时数据库实例创建在了C盘中的默认位置,亦即是与数据库安 ...
- SpringMVC核心——映射问题
一.SpringMVC 使用 RequestMapping 来解决映射问题. 二.在学习 RequestMapping 之前,首先来看一张图. 这张图表示的是发送一次 http 请求时,所包含的请求 ...
- csharp: Speech
Speech SDK 5.1https://www.microsoft.com/en-us/download/details.aspx?id=10121 detects mobile devices ...
- 将C1Chart数据导出到Excel
大多数情况下,当我们说将图表导出到Excel时,意思是将Chart当成图片导出到Excel中.如果是这样,你可以参考帮助文档中保存和导出C1Chart章节. 不过,也有另一种情况,当你想把图表中的数据 ...
- 【Asphyre引擎】学习笔记(一)
先来说说一下几个最基本的对象: TGraphicsDeviceProvider:这个对象决定我们的游戏是用什么来渲染的,比如DX或者OpenGL,DX还有多个版本可以选择. TCustomSwapCh ...