【IOS 开发学习总结-OC-4】objective-c 运算符

2023-11-18

运算符是用于数据运算,赋值和比较等的特殊符号。
objective-c 语言中的运算符有以下几种:

  1. 算术运算符
  2. 赋值运算符
  3. 比较运算符
  4. 逻辑运算符
  5. 位运算符
  6. 类型相关运算符

算术运算符

有7个基本运算符:

  1. +:加法运算符
  2. -:减法运算符(还可以作为负号使用)
  3. *:乘法运算符
  4. /:除法运算符(这里的除法运算符和我们日常中的除法略有不同,如10/4的结果是2,而不是2.5。另外,避免除数为0的情况)
  5. %:取余运算符:该运算符两边的操作数都必须是整数,结果为第一个数除以第二个运算数得到的余数,除数不可为0
  6. ++:自加。单目运算符。可以出现在操作数的任何一边。但作用效果是不同的,如果出现在操作数左边,则先将操作数+1,然后在使用操作数的数值;如果出现在右边,先使用操作数数值后,然后再+1;
  7. –:效果与++类似。将操作数进行-1操作。

赋值运算符

用于为变量指定变量值。objective-c 使用”=”作为赋值运算符。可以将常量值赋给变量,也可以将变量的值赋给变量。赋值运算符支持连续赋值,因为可读性差,故不推荐这样使用。

扩展后的赋值运算符

赋值运算符可以与算术运算符,位运算符结合,扩展成为功能更强大的运算符。只要能使用这种运算符,就推荐使用这种运算符。 扩展后的运算符如下:
这里写图片描述

位运算符

objective-c 支持的位运算符有6个:

  1. &:按位与
  2. |:按位或
  3. ~:按位非
  4. ^:按位异或
  5. <<:左位移运算符(将运算数的二进制码整体左移指定位数,右边空出来的为用0填充)
  6. >>:右位移运算符(将运算数的二进制码整体右移指定位数,左边空出来的以原来的符号位填充,也就是说如果操作数原来是正数,左边就补0,负数,左边就补1)
    特别提示:位移运算符只适合对整形数进行运算。
    运算法则如下图:
    这里写图片描述

这里写图片描述

比较运算符

用于判断2个变量或常量的大小,比较运算的结果是整数值(1代表真,0代表假)。比较运算符有6种:
分别是:>,>=,<,<=,==和!=(不等于)。

逻辑运算符

逻辑运算符用于操作2个布尔型的变量或常量。逻辑运算符主要有4个:

  1. &&(与):必须2个操作数都是真,才为真,否则返回假;
  2. ||(或):只要2个操作数中有一个为真,就可以返回真,否则为假;
  3. !(非):对操作数取反。如操作数为真,则返回假,反之亦然。
  4. ^(异或):2个操作数,相同返回假,不同返回真。

**特别提示:**objective-c 并没有提供真正的布尔型数据,通常会用1代表真,用0代表假。除此之外,objective-c 会把任意二进制位后8位不为0的整数值当成真。

逗号运算符

逗号运算符用于将多个表达式”连接”起来,而整个逗号表达式将返回最后一个表达式的值。例如如下代码:

int a=(4*6,4>2)//就算的结果是 a 的值为真,也就是1
NSLog(@"%d",a);

需要指出的是:并不是所有出现逗号的地方都是逗号运算式,有时逗号只是起到分割的作用。

三目运算符

三目运算符(?:)的语法格式为:
(expression)?if-true-statement :if-false-statement;
如果前面的条件判断结果为真,就执行冒号前的值,否则执行冒号后面的值。

大部分时候,三目运算符相当于 if else 的简化写法。二者的区别在于:
后者 if 后的代码块可以有多个语句,而前者不支持多个语句。
三目运算符支持嵌套。示例代码:

    NSString * str = 5 > 3 ? @"5大于3" : @"5不大于3";
    // 输出"5大于3"
    NSLog(@"%@" , str);
    // 输出"5大于3"
    5 > 3 ? NSLog(@"5大于3") : NSLog(@"5小于3");
    int a = 5;
    int b = 5;
    // 下面将输出a等于b
    a > b ? NSLog(@"a大于b") : (a < b ? NSLog(@"a小于b") : NSLog(@"a等于b"));

运算符的结合性和优先级

所有的数学运算符都认为是从左到右运算的,OC 语言的大部分运算符也都是 从左向右结合的。只有单目运算符,赋值运算符和三目运算符例外(从右向左)
运算符有不同的优先级,即在表达式的运算中有运算顺序。下图中的优先级是从高到底的。
这里写图片描述
这里写图片描述

特别提示:

  1. 不要把表达式写得过于复杂。如果复杂,把它分成几步来完成。
  2. 不过过多依赖运算符的优先级来控制运算执行顺序,尽量使用()来控制表达式执行顺序的同时提高可读性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【IOS 开发学习总结-OC-4】objective-c 运算符 的相关文章

随机推荐

  • grid常用属性及属性值介绍

    文章目录 前言 一 grid布局是什么 二 常用简写 必会 2 1 grid 2 2 gap grid gap 2 3 grid area 2 4 grid template 2 5 place content 2 6 place item
  • 1359: [Baltic209]Candy

    题目链接 题目大意 tan90 题解 不存在的 我的收获 如何快速升级
  • protobuf与protoc-gen-go

    什么是protobuf Protobuf Protocol Buffer 是google 的一种数据交换的格式 它独立于语言 独立于平台 google 提供了多种语言的实现 java c c go 和 python 每一种实现都包含了相应语
  • Jmeter接口测试+压力测试

    jmeter是apache公司基于java开发的一款开源压力测试工具 体积小 功能全 使用方便 是一个比较轻量级的测试工具 使用起来非常简单 因为jmeter是java开发的 所以运行的时候必须先要安装jdk才可以 jmeter是免安装的
  • OkHttp的使用之{RequestBody、FormBody、MultipartBody}

    目录 0 相关文章 1 POST请求 1 1 RequestBody json数据提交 1 2 FromBody 表单提交 这种能满足大部分的需求 1 3 MultipartBody 文件上传 1 4 图片下载 文件下载 0 相关文章 Ok
  • 布隆过滤器(Bloom Filter)

    1 引言 通常我们会遇到很多要判断一个元素是否在某个集合中的业务场景 一般想到的是将集合中所有元素保存起来 然后通过比较确定 链表 树 散列表 又叫哈希表 Hash table 等等数据结构都是这种思路 但是随着集合中元素的增加 我们需要的
  • 线程相关面试题

    1 ThreadPoolExecutor 线程池执行 有哪些常用的方法 1 执行线程池 submit excute 2 终止线程池 shutdown 3 判断线程是否终止 isShutdown 4 获取正在运行的线程数 getAcitive
  • 详解Python中字符串前“b”,“r”,“u”,“f”的作用

    1 字符串前加 u 例 u 我是含有中文字符组成的字符串 作用 后面字符串以 Unicode 格式 进行编码 一般用在中文字符串前面 防止因为源码储存格式问题 导致再次使用时出现乱码 2 字符串前加 r 例 r n n n n 表示一个普通
  • 视频稳像(Video Stabilization)

    原文 https blog csdn net hjl240 article details 52683738 开源 关键词 Video Stabilization 不错 https github com yaochih awesome vi
  • python中unittest+ddt的应用

    一 单个EXCEL执行 import unittest from class api login topup demo import http request from class api login topup http attr imp
  • 使用KIF进行功能性iOS UI测试

    开始使用KIF 从Github下载KIF源资产并将其放置在可以轻松找到的地方 或者 可以使用 Git 的子模块来获取本地使用的源代码 git 初始化 git submodule 添加 https github com kif framewo
  • c#的值类型和引用类型(拆装箱)

    1 值类型和引用类型 c 中所有的引用类型共同的基类是System Object 1 管理机制 值类型 操作系统负责 作用域结束时被操作系统自动释放 引用类型 垃圾回收器负责 2 内存分配 值类型 值类型实例总会被分配到变量声明的地方 声明
  • 计算机网络(3.6)数据链路层- PPP 协议的帧格式和工作状态

    PPP 协议的帧格式 PPP 帧的首部和尾部分别为 4 个字段和 2 个字段 标志字段F 0x7E 符号 0x 表示后面的字符是用十六进制表示 十六进制的7E的二进制表示是 01111110 地址字段A只置为0xFF 地址字段实际上并不起作
  • 托管函数和非托管函数如何互相传递ansi字符串?

    先来介绍两个预处理指令 pragma unmanaged pragma managed 这两个预处理指令 控制函数编译成托管函数 还是非托管函数 是函数级别的预控制指令 1 托管函数传送字符串给非托管函数 分三步走 a 先调用StringT
  • echars水状_Echarts饼状图属性设置

    标题 title text 学生生源地来源分布图 subtext 模拟数据 x 设置水平安放位置 默认左对齐 可选值 center left right number x坐标 单位px x center y 设置垂直安放位置 默认全图顶端
  • IPv6地址结构、地址分类以及表示方法

    IPv6地址的表示方法 IPv6地址总长度为128比特 通常分为8组 每组为4个十六进制数的形式 每组十六进制数间用冒号分隔 例如 FC00 0000 130F 0000 0000 09C0 876A 130B 这是IPv6地址的首选格式
  • Python从入门到精通,100天就够了!(2)——分支结构与循环结构

    文章目录 一 分支结构 选择结构 1 分支结构初体验 2 分支结构练习 二 循环结构 1 for in 循环 2 for in 循环练习 3 while 循环 4 break和continue 5 while 循环练习 6 嵌套的循环结构
  • 【零基础 快速学Java】韩顺平 p35-51 变量、数据类型(整型,浮点,字符,布尔)、重要编码,API文档

    课程 p35 51 变量 变量是程序的基本组成单位 变量有三个基本要素 类型 名称 值 变量相当于内存中一个数据存储空间的表示 通过变量名可以访问变量 值 四个常用数据类型 int double char String String的S要大
  • LuCI - 网页用户配置界面开发

    luci 参考资料 http luci subsignal org trac wiki Documentation http wiki openwrt org doc techref preinit mount first boot htt
  • 【IOS 开发学习总结-OC-4】objective-c 运算符

    运算符是用于数据运算 赋值和比较等的特殊符号 objective c 语言中的运算符有以下几种 算术运算符 赋值运算符 比较运算符 逻辑运算符 位运算符 类型相关运算符 算术运算符 有7个基本运算符 加法运算符 减法运算符 还可以作为负号使