运算符

似梦清欢
• 阅读 549

三目运算符是条件运算符。 三目运算符通过判断问号之前的表达式的真假来确定整体表达式的值。 条件运算符优先级高于赋值运算符,即可以通过max=a>b?a:b的形式输出两个数中的最大值。

逗号表达式的整体值是最后一个表达式的值。 在归并排序中有使用过,如下: for (i = low, j = mid + 1; i <= mid && j <= high;)此处不关心逗号表达式的整体值,只是对两个变量做初始化。 逗号运算符优先级最低。 逗号表达式不限制逗号的数量。

自增自减运算符和取值运算符 后++或后--的计算时,先去掉自增自减运算符,将其他表达式计算完成后,再执行自增自减运算。 如j=i++>-1,先比较i>-1,再将比较后的结果赋给j,最后执行i++。 ::: tip 后置++,就是先使用(先赋值),再++。 前置++,就是先++,再使用(再赋值)。 ::: ::: warning 后置- -和前置- -直接按照运算符优先级计算。 只有比后置++或后置- -优先级更高的操作符,如(),[],才可以和后置++、- -作为一个整体。 ::: 如下: int a[3]={3,4,5}; int* p=a; int j; j=p++; //p取到数组首元素地址,p得到首元素3,先计算j=p得j=3,再p++,指向数组第二个元素 j=p[0]++; //p[0]取到数组第二个元素4,再p[0]++,即4+1,得到5 *上述代码中,和++优先级相同,所以分开计算;[]优先级高于++,所以可以把p和[0]放在一起++。* 即代码运行结束后,j=4,*p=5。

优先级用来标识运算符在表达式中的运算顺序,在求解表达式的值的时候,总是先按运算符的优先次序由高到低进行操作。但是当一个运算对象两侧的运算符的优先级相同时,则按运算符的结合性来确定表达式的运算顺序。 结合性是指同一优先级的运算符在表达式中操作的组织方向,即:当一个运算对象两侧的运算符的优先级别相同时,运算对象与运算符的结合顺序。第二优先级的运算符结合方向是从右向左,较易出错。

位运算符 位运算符<<、>>、、|、^、&含义分别是左移、右移、按位取反、按位或、按位异或、按位与。 ::: warning 位运算符的操作数是二进制数。位运算符只能对整型数据进行操作。 ::: 移位的效率高于乘法和除法。 ::: tip 左移(<<):高位丢弃,低位补0,相当于×2。 右移(>>):低位丢弃,正数高位补0,(无符号数认为是正数),负数高位补1,相当于÷2。 ::: 无符号数(unsigned):所有二进制位都是数值位,没有符号位。无符号数只能是正数或0,不能是负值。 ::: tip 有符号数第一位是符号位,剩下的数值位在前面补一个0,然后计算值。 不写unsigned的二进制的第一位就会被认为是符号位,0为正,1为负。 负数右移对偶数来说是除以2,对奇数来说先减1再除以2。 ::: 上述C语言的左移和右移是算术左移和算术右移,逻辑左移和上述算术左移没有区别(高位丢弃低位补0),逻辑右移高位无论正负数一律补0。 按位异或(^):相同数字异或结果为0,不同数字异或结果为1。任何数字和0异或的结果都是其本身。 按位取反():1变为0,0变为1。 按位与(&)、按位或(|):两个数字的每一位进行与和或的操作。

::: warning 二进制数左移右移不改变数字本身。 ::: 如十六进制数0x8011,二进制为1000 0000 0001 0001,首位被认为是符号位,1表示负数,右移前面加1,变为11000 0000 0001 000。 如果0x8011是无符号数,二进制为1000 0000 0001 0001,没有符号位,右移前面加0,变为0100 0000 0000 1000。 ::: tip 在计算数值时,有符号数的数值位前面默认补0再计算,无符号数所有位置都是数值位参与计算,如果数值是正数,有符号数和无符号数计算结果相同;如果是负数,有符号数和无符号数相差32768,即相差无符号数的首位1,二进制数1000 0000 0000 0000。 ::: 可以通过计算器验证。 运算符 异或的使用:当一个数组中有有一个数字只出现一次,其他数字出现两次的情况。result初始值必须为0。

int main()
{
    int i = 0;
    int arr[5] = { 5,6,7,6,5 };
    int result = 0;  //初始时使用0和数组元素进行异或
    for (i; i < 5; i++)
    {
        result^= arr[i];  
    }
    printf("%d", result);
    return 0;
}

运算符 运算符 运算符

点赞
收藏
评论区
推荐文章
Karen110 Karen110
3年前
一篇文章带你了解JavaScript类型转换
类型转换是一种将一种数据类型转换为另一种数据类型的方法。一、运算符的类型typeof运算符可以帮助你找到你的变量的类型。typeof运算符返回一个变量或表达式的类型。例:项目JavaScripttypeof运算符typeof运算符返回变量或表达式的类型:document.write(typeof""""typeof"Json"""
Wesley13 Wesley13
3年前
java 选择结构if
图11     if…elseif…else语句的流程图!(https://oscimg.oschina.net/oscnet/421d60a830835fe0a86905053cf0c13578d.png)选择结构if语句与三元运算转换  三元运算符,它和ifelse语句类似,语法如下:  判断条件?表达式1:表达式2
CuterCorley CuterCorley
3年前
C语言入门系列之4.分支结构程序-关系、逻辑运算和if、switch语句
一、关系运算符和表达式关系运算符:又叫比较运算符,在程序中经常需要比较两个量的大小关系,以决定程序下一步的工作。比较两个量的运算符称为关系运算符。1.关系运算符及其优先顺序在C语言中有以下关系运算符:<小于<小于或等于\大于\大于或等于等于不等于关系运算符都是双目运算
Wesley13 Wesley13
3年前
thinkphp3.2.3模板渲染支持三元表达式
thinkphp3.2.3模板渲染支持三元表达式{$status?'正常':'错误'}{$info'status'?$info'msg':$info'error'}注意:三元运算符中暂时不支持点语法。如下:           <divclass"modalhidefade"id'myModa
Wesley13 Wesley13
3年前
C++ 逗号运算符
1.逗号运算符的结果是,最后那个式子的结果2.逗号运算符是优先级最低的,比等号的运算符优先级还低1inta2;2intb3;3intca,b,ab;4//结果是c2;因为等号赋值运算符
Stella981 Stella981
3年前
Lua 运算符
Lua运算符运算符是一个特殊的符号,用于告诉解释器执行特定的数学或逻辑运算。Lua提供了以下几种运算符类型:算术运算符关系运算符逻辑运算符其他运算符算术运算符下表列出了Lua语言中的常用算术运算符,设定A的值为10,B的值为20:操作符
Stella981 Stella981
3年前
Python运算符
1.运算符1.1运算符的概念运算符⽤于执⾏程序代码运算,会针对⼀个以上操作数项⽬来进⾏运算。例如:23,其操作数是2和3,⽽运算符则是“”1.2运算符的分类算术运算符赋值运算符⽐较运算符(关系运算符)逻辑运算符条件运算符(三元运算符)2.算术运算符
Stella981 Stella981
3年前
JavaScript学习总结(二)——逻辑Not运算符详解
在JavaScript中,逻辑NOT运算符与C和Java中的逻辑NOT运算符相同,都由感叹号(!)表示。与逻辑OR和逻辑AND运算符不同的是,逻辑NOT运算符返回的一定是Boolean值。逻辑NOT运算符的行为如下:如果运算数是对象,返回false如果运算数是数字0,返回true如
小万哥 小万哥
1年前
Python 运算符
运算符用于对变量和值执行操作。在下面的示例中,我们使用运算符将两个值相加:pythonprint(105)Python将运算符分为以下几组:算术运算符赋值运算符比较运算符逻辑运算符身份运算符成员运算符位运算符算术运算符算术运算符用于对数字值执行常见的数
小万哥 小万哥
4个月前
Kotlin 布尔值教程:深入理解与应用示例
Kotlin中的布尔值是一种数据类型,仅能存储true或false两种状态,适用于表示二选一的情况,如开关或真假判断。布尔类型可通过Boolean关键字声明,并直接赋值为true或false。此外,Kotlin支持使用比较运算符创建布尔表达式,用于条件判断。条件语句包括if、else和elseif,允许根据不同条件执行特定代码块。特别地,在Kotlin中,if..else结构不仅能作为语句使用,还能作为表达式,即可以在条件判断的同时返回一个值。这种灵活性使得Kotlin在处理条件逻辑时更为简洁高效。
似梦清欢
似梦清欢
Lv1
学海无涯
文章
17
粉丝
17
获赞
17