iOS开发入门 ? C语言(运算符)

算术运算符:

  1. +  加法运算符
  2. -   减法运算符,或负值运算符
  3. *  乘法运算符
  4. /   除法运算符
  5. % 模运算符,或称取余运算符,要求%两侧均为整型数据

% 取模(取余)运算符的注意事项:

1)取模运算符的操作数只能是整数

2)取模运算符的正负性取决于前面那个操作数正负

3)如果取模运算的左边小于右边, 那么结果就是左边

取余(模运算):5%3=2; -5%3=-2; 5%-3=2; -5%-3=-2 (余数的符号与被除数一致!)

2%9=2;

算术运算的注意点:

  1. 自动类型转换

    int a = 10.6;

    int b = 10.5 + 1.7;

    int b = 10.5 + 10; //将右边的10提升为了double类型

    自动将大类型转换为了小类型,会丢失精度

  1. 自动类型提升

  (相同数据类型的值才能进行运算(比如加法运算),而且运算结果依然是同一种数据类型。系统会自动对占用内存较少的类型做一个“自动类型提升”的操作)

    float a = 10 + 3.45f;//int 提升为 float

    int b = ‘A‘ + 32; // char 提升为 int

    double c = 10.3f + 5.7; // float 提升为 double

  1. 解决除法的精度问题

    double b = 1.0 / 2;

  1. 强制类型转换

  (将大范围的数据赋值给小范围变量时,系统会自动做一个强制类型转换的操作,这样容易丢失精度)

    double a = (double)1 / 2;

    double b = (double)(1 / 2);

    int i = 10.7;  //系统转

    int i = (int) 10.7;  //自己强转

    int a = 198l; // long 转换为 int

    char b = 65; // int 转换为 char

    int c = 19.5f; // float 转换为 int

赋值运算符的结合方向是:从右到左,而且优先级比算术运算符低

赋值运算符是所有运算符中除了逗号运算符以外优先级最低的

自增自减写在前面和后面的区别:

  • 如果++写在变量的前面, 那么会先将变量自增再用自增之后的结果参与运算
  • 如果++写在变量的后面, 那么会先将变量的值参与运算再将变量自增
  • 总结一句话: ++在前, 先自增再运算, ++在后, 先运算再自增

++a和a++的区别:

  1. 先操作,再使用

    int b = ++a;  //等价于 a=a+1;  b=a;

  1. 先使用,后操作。

    int b = a++; //等价于 b=a;  a=a+1;

  运算规则:先左++,再赋值,最后右++。

sizeof()运算符:

sizeof可以用来计算一个变量或者一个常量、一种数据类型所占的内存字节数。

注意:sizeof是一个运算符, 不是一个函数

利用sizeof计算的格式: sizeof(变量/常量/数据类型);

sizeof一共有3种形式:

  1. sizeof(变量\常量)
  2. sizeof  变量\常量
  3. sizeof(数据类型)

举例:

#include <stdio.h>

int main() {

char c=‘a‘;

printf("%lu, %lu\n", sizeof(10), sizeof(c));//4, 1

printf("%lu, %lu\n", sizeof 10, sizeof c);//4, 1

printf("%lu\n", sizeof(int));//4

return 0;

}

逗号运算符和逗号表达式

  1. 逗号运算符主要用于连接表达式

    例如:a=a+1,b=3*4

  1. 用逗号运算符连接起来的表达式称为逗号表达式

    它的一般形式为:表达式1,表达式2,… …,表达式n

    逗号表达式的运算过程是:先算表达式1,再算表达式2,依次算到表达式n

    整个逗号表达式的值是最后一个表达式的值

//逗号运算符

#include <stdio.h>

//逗号运算符类似于加减乘除运算符,逗号运算符取最后一个表达式的值。

int main(){

int num,num1;

num=4,7; //逗号运算符的优先级低于赋值运算符

num1=(4,7); //提高逗号运算符的优先级,先逗号运算,再赋值运算

printf("num=%d num1=%d\n",num,num1); // num=4 num1=7

return 0;

}

关系运算符

<    小于运算符

<=  小于等于运算符

>    大于运算符

>=  大于等于运算符

==   等于运算符

!=   不等于运算符

  关系运算符的返回值只有两种, 要么真, 要么假. 1(真)和0(假)

使用注意(优先级):

  1. (算术运算符)的优先级大于(关系运算符)

如:3+4>8-2;//结果为1; 等价于:(3+4)>(8-2);

  1. 关系运算符的结合方向为“从左往右”

如:4>3>2;//结果为0

  1. (<,>,<=,>=)的优先级大于(==,!=)

如:2==3>1;//结果为0; 等价于:2==(3>1);

int a=3>4+7;//结果为0

int b=(3>4)+7;//结果为7

int c=5!=4+2*7>3==10;//结果为0

逻辑运算符

  && 逻辑与 、|| 逻辑或 、! 逻辑非

  使用注意:

  • 若想判断a的值是否在(3, 5)范围内,千万不能写成3<a<5,因为关系运算符的结合方向为“从左往右”。比如a为2,它会先算3<a,也就是3<2,条件不成立,结果为0。再与5比较,即0<5,条件成立,结果为1。因此 3<a<5的结果为1,条件成立,也就是说当a的值为2时,a的值是在(3, 5)范围内的。这明显是不对的。正确的判断方法是:(a>3) && (a<5)
  • 可以多次连续使用逻辑非运算符:!(4>2)结果为0,是"假",!!(4>2)结果为1,是"真",!!!(4>2)结果为0,是“假”
  • C语言规定:任何非0值都为“真”,只有0才为“假”。因此逻辑与也适用于数值。  
  • 比如:
    • 5 && 4的结果是1,为“真”;-6 && 0的结果是0,为“假”。
    • 5 || 4的结果是1,为“真”;-6 || 0的结果是1,为“真”;0 || 0的结果是0,为“假”。
    • !5、!6.7、!-9的结果都为0,!0的结果为1。

  && 和 || 都具有短路特征:

  如果前一个表达式能决定最终结果则不会计算后一个表达式!


#include <stdio.h>

int main() {

//逻辑运算符&&和||的短路特征

int a=3,b=4,c=5,r;

r=(a>b)&&(++b>c);

printf("%d,%d,%d,%d\n", a, b, c, r);//3, 4, 5, 0

r=(a<b++)||(b<c++);

printf("%d,%d,%d,%d\n", a, b, c, r);//3, 5, 5, 1

//非短路的逻辑运算符&和|

a=3;b=4;c=5;

r=(a>b)&(b>++c);

printf("%d,%d,%d,%d\n", a, b, c, r);//3, 4, 6, 0

r=(a<b)|(b<c++);

printf("%d,%d,%d,%d\n", a, b, c, r);//3, 4, 7, 1

return 0;

}

优先级: 

  逻辑运算符的优先级顺序为: 小括号() > 负号 - > ! > 算术运算符 > 关系运算符 > && > ||

 条件运算符(三目运算符 " ? : "):表达式1?表达式2:表达式3

如果表达式1为真,三目运算符的运算结果为表达式2的值,否则为表达式3的值

单目运算符:操作数只有一个(-1;)

双目运算符:操作数有两个(1 - 2;)

三目运算符:操作数有三个(5 > 4 ? 1 : 0)

当我们不确定某些运算符的优先级的时候,可以使用() 来明确优先级

时间: 2024-10-03 01:23:44

iOS开发入门 ? C语言(运算符)的相关文章

iOS开发入门 ? C语言(字符串、字符串数组、命令行参数)

字符串 1. 概念 用双引号引起来的就是字符串 "a string" //C语言编译器会将两个并列的字符串自动拼接成一个字符串 "a string""another a string" // \是换行连接的标记(一行不够写) "a looooooooooong \ string" 常见ASCII编码: 'A' == 65    'a' == 97    '0' == 48    '\0' == 0 int a[10]; //表

iOS开发入门 ? OC语言&#183;笔记五

MRC — 手动管理内存 1.1 内存引用平衡原则 1) 如果使用alloc,new开头,或者是copy(复制一个对象)来创建一个对象,意味着你拥有这个对象的所有权.这个对象的引用计数器初始值为1(也有可能>1). 2) 如果你拥有这个对象的所有权,在不使用此对象时,就有责任向对象发送release消息.(谁创建了对象,谁就有责任release这个对象) 3) 如果并不拥有一个对象的所有权,而想要使用这个对象,为了防止你在使用此对象期间,对象被别人释放掉,需要向对象发送retain消息,以保持对

iOS开发入门 ? OC语言&#183;笔记四

内存管理 : 主要对堆内存进行管理,所谓的管理是指内存的分配(创建)和释放(回收) 内存管理:管理对象的分配和释放,回收那些不需要再使用的对象(内存) 下列行为都会增加一个app的内存占用 创建一个OC对象 定义一个变量 调用一个函数或者方法 如果app占用内存过大,系统可能会强制关闭app,造成闪退现象,影响用户体验 1.1 两种管理方式 MRC(Manual Reference Counting):手动引用计数(手动管理内存) 所有对象的内存都需要我们手动管理, 需要程序员自己编写retai

iOS开发入门 ? C语言(分支结构 + 循环结构)

分支结构: if 语句: 第一种:如果条件表达式成立就执行小括号后面大括号中的语句 if(条件表达式){ 语句; ... } 第二种:如果条件表达式成立就执行if后面小括号后面大括号中的语句,否则就执行else后面大括号中语句 这里至少有一个代码会被执行 if(条件表达式){ 语句; ... }else{ 语句; ... } 第三种: if(条件表达式1){ 语句; .... }else if(条件表达式2){ 语句; .... }else if(条件表达式3){ 语句; .... } ....

iOS开发入门教程_iOS开发视频教程

iOS开发入门教程 (Object-C.网络编程.多线程.蓝牙.二维码.Cocos2D.OpenGL)适合人群:初级课时数量:34课时用到技术:IOS,Object-C,OpenGL,XCode,Cocos 2D涉及项目:Cocos+2D.Game Kit蓝牙数据处理等咨询QQ:1840215592 iOS开发入门教程详细查看:http://www.ibeifeng.com/goods-471.html1.1.课程目标iOS开发入门教程内容的目标是初学者入门,让入门者提高,让所有人符合企业招聘的

iOS开发系列--C语言之基础知识

概览 当前移动开发的趋势已经势不可挡,这个系列希望浅谈一下个人对IOS开发的一些见解,这个IOS系列计划从几个角度去说IOS开发: C语言 OC基础 IOS开发(iphone/ipad) Swift 这么看下去还有大量的内容需要持续补充,但是今天我们从最基础的C语言开始,C语言部分我将分成几个章节去说,今天我们简单看一下C的一些基础知识,更高级的内容我将放到后面的文章中. 今天基础知识分为以下几点内容(注意:循环.条件语句在此不再赘述): Hello World 运行过程 数据类型 运算符 常用

iOS开发入门——17条 Swift 最佳实践规范(上)

文章来源:http://www.zretc.com/technologyDetail/432.html 前言 这篇IOS开发入门文章是我根据在 SwiftGraphics 工作时的一系列笔记整理出来的.文中大多数建议是经过深思熟虑的,但仍可以有其他类似的解决方法.因此,如果其他方案是有意义的,这些方案会被添加上去. 这个最佳实践不是强加或者推荐 Swift 在程序.面向对象或者函数风格上的应用.更重要的是,这里要讲述的是务实的方法.如有需要的话,某些建议可能会集中在面向对象或者实用的解决方法.

李洪强iOS开发Swift篇—04_运算符

李洪强iOS开发Swift篇—04_运算符 一.运算符 1.Swift所支持的部分运算符有以下一些 赋值运算符:= 复合赋值运算符:+=.-= 算术运算符:+.-.*./ 求余运算符:% 自增.自减运算符:++.-- 比较运算符:==.!=.>.<.>=.<= 逻辑运算符:&&.||.! 三目运算符:? : 范围运算符:..< .... 溢出运算符:&+.&-.&*.&/.&% 2.赋值运算符 (1)1对1赋值 var

iOS开发入门知识点总结

Objective-C 一门动态语言,动态两个字主要就体现在我们调用方法的时候,运行时回动态的查找方法,然后调用相应的函数地址.运行时是整个Objective-c程序的基石,有了它我们的程序才能正常运行起来. NSObject是Cocoa中绝大部分类的基类,它主要是提供了序列话,拷贝对象,以及支持运行时动态识别的框架. 另外,在OC中,一切皆为指针. 在Objective-c中每一个类对象最开始的位置都会有一个isa指针,该指针指向一块内存区域,该部分主要包含两部分信息: 1.指向父类的指针.