运算符

Suzhou
• 阅读 36

三目运算符是条件运算符。 三目运算符通过判断问号之前的表达式的真假来确定整体表达式的值。 条件运算符优先级高于赋值运算符,即可以通过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;
}

运算符 运算符 运算符

点赞
收藏
评论区
推荐文章
CuterCorley CuterCorley
1年前
C语言入门系列之4.分支结构程序-关系、逻辑运算和if、switch语句
一、关系运算符和表达式关系运算符:又叫比较运算符,在程序中经常需要比较两个量的大小关系,以决定程序下一步的工作。比较两个量的运算符称为关系运算符。1.关系运算符及其优先顺序在C语言中有以下关系运算符:<小于<小于或等于\大于\大于或等于等于不等于关系运算符都是双目运算
Karen110 Karen110
1年前
一篇文章带你了解JavaScript类型转换
类型转换是一种将一种数据类型转换为另一种数据类型的方法。一、运算符的类型typeof运算符可以帮助你找到你的变量的类型。typeof运算符返回一个变量或表达式的类型。例:项目JavaScripttypeof运算符typeof运算符返回变量或表达式的类型:document.write(typeof""""typeof"Json"""
Wesley13 Wesley13
1年前
thinkphp3.2.3模板渲染支持三元表达式
thinkphp3.2.3模板渲染支持三元表达式{$status?'正常':'错误'}{$info'status'?$info'msg':$info'error'}注意:三元运算符中暂时不支持点语法。如下:           <divclass"modalhidefade"id'myModa
Wesley13 Wesley13
1年前
2.C++中的bool类型,三目运算符,引用
本章主要内容:1)bool类型2)三目运算符3)引用1.布尔型bool在C中,bool类型只有true(非0)和flase(0)两个值,且bool类型只占用了一个字节.例如:include<stdio.h
Wesley13 Wesley13
1年前
java 选择结构if
图11     if…elseif…else语句的流程图!(https://oscimg.oschina.net/oscnet/421d60a830835fe0a86905053cf0c13578d.png)选择结构if语句与三元运算转换  三元运算符,它和ifelse语句类似,语法如下:  判断条件?表达式1:表达式2
Stella981 Stella981
1年前
JavaScript的语法
语句和表达式语句相当于句子,表达式相当于短语,运算符则相当于标点符号和连接词。语句的结果值代码块的结果值就如同一个隐式的返回,即返回最后一个语句的结果值。表达式的副作用最常见的有副作用(也可能没有)的表达式是函数调用:functionfoo(){aa1;}var
Wesley13 Wesley13
1年前
C++ 逗号运算符
1.逗号运算符的结果是,最后那个式子的结果2.逗号运算符是优先级最低的,比等号的运算符优先级还低1inta2;2intb3;3intca,b,ab;4//结果是c2;因为等号赋值运算符
Stella981 Stella981
1年前
Lua 运算符
Lua运算符运算符是一个特殊的符号,用于告诉解释器执行特定的数学或逻辑运算。Lua提供了以下几种运算符类型:算术运算符关系运算符逻辑运算符其他运算符算术运算符下表列出了Lua语言中的常用算术运算符,设定A的值为10,B的值为20:操作符
Stella981 Stella981
1年前
JavaScript学习总结(二)——逻辑Not运算符详解
在JavaScript中,逻辑NOT运算符与C和Java中的逻辑NOT运算符相同,都由感叹号(!)表示。与逻辑OR和逻辑AND运算符不同的是,逻辑NOT运算符返回的一定是Boolean值。逻辑NOT运算符的行为如下:如果运算数是对象,返回false如果运算数是数字0,返回true如
Suzhou
Suzhou
Lv1
这个网站设计堪称垃圾。CTRL+S过后的东西,重启电脑只能保存5行。多按几次CTRL+S还提示频繁保存不了。吐了。
17
文章
2
粉丝
3
获赞