C语言操作符(总结)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shanghx_123/article/details/78628280

操作符 分类:

        算术操作符
        移位操作符
        位操作符
        赋值操作符
        复合赋值操作符
        单目操作符
        关系操作符
        逻辑操作符
        条件操作符
        逗号操作符
        下标引用、函数调用和结构成员

算术操作符

操作符 功能
+
-
*
/
% 求余数(取模)
  1. 加、减、乘很简单,和平常数学中运算规则相同。
  2. /(除)这个操作符需要注意的是:除的时候如果’/’两边只要有(一个或两个)浮点数,采用的是浮点型除法,若’/’两边都是整型,则采用的是整型除法。
  3. %这个操作符两边的数只能是整数,它返回的是整除之后的余数

移位操作符

操作符 功能
<< 左移操作符
>> 右移操作符
  1. 移位操作符作用的对象是一个数的补码;
  2. 对于左移:左边抛弃,右边补0;
  3. 对于右移:右边抛弃,左边补原来的符号位(采用算术移位);
  4. 对于’>>’操作符,分为两种移位规则:一种逻辑移位,另一种是算术移位,
    a.逻辑移位规则是右边抛弃,左边最高位直接补0,不考虑之前数的符号位。
    b.算术移位规则是右边抛弃,左边最高位补和之前数相同的符号位。而目前编译器通常采用的是算术移位规则。
  5. 但这里需要注意,对一个数移位操作完成后,当前的数不会改变的,除非把它赋值给另外一个变量。
  6. 对于移位操作符,不要移动负数位,这个是标准未定义的。
int main()
{
    int p=0,q=0,n=2;
    p=n<<1;
    printf("%d",p);
    q=n>>1;
    printf("%d",q);
}

此时输出的结果为:p=4,q=1;左移操作相当于给之前的数乘2,右移操作相当于给之前的数除2;
这里有一个思考题:求一个整数存储在内存中的二进制中1的个数。

位操作符

操作符 功能
& 按位与
按位或
^ 按位异或

1.同样这里位操作符作用的对象也是一个数的补码,并且它们的操作数必须是整数。
2.对于’&’,两个数补码对应位置的值都为1,结果为1,否则为0;对于’|’,两个数补码对应位置都是0,结果是0,否则为1;
问题:不能创建临时变量(第三个变量),实现两个数的交换

赋值操作符

操作符 功能
= 给一个变量赋值

这里需要注意的是为了代码方便理解和调试,赋值时不要连续赋值。

复合赋值符

操作符 功能
+= 相加之后赋值
-= 相减之后赋值
*= 相乘之后赋值
/= 相除之后赋值
%= 取余之后赋值
>>= 右移之后赋值
<<= 左移之后赋值
= 按位或之后赋值
^= 按位与之后赋值

用复合操作符可以使代码更简洁。

单目操作符

操作符 功能
逻辑反操作
+ 正值
- 负值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位整体取反
前置、后置–
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换

1. sizeof操作符计算的是变量(类型)所占空间的大小,是按字节来计算,重要的是,sizeof (a+b)里面的表达式不参与计算,若a,b都是int行类型,其结果依然是4;
2. 当数组作为参数为函数传参时,由于数组要发生降级,其会降级为一个指针,如果此时在一个函数中sizeof计算数组的大小是不可以的,其计算的是数组降级为指针的大小(4个字节),所以,若函数要得到一个数组的大小,应该在主函数中计算。
3. 对于前置++或 - -,先操作,再使用,对于后置++或 - -,先使用,再操作。

关系操作符

操作符 功能
> 大于
>= 大于等于
< 小于
<= 小于等于
!= 不等于
== 等于

这些关系操作符,比较简单,不多说,但需要注意,不要将等于(==)写成赋值操作(=)。

逻辑操作符

操作符 功能
&& 逻辑与
丨丨 逻辑或

不同与按位与和按位或。

条件操作符

操作符 功能
exp1?exp2:exp3 exp1为真,结果为exp2,否则结果是exp3

逗号操作符

操作符 功能
exp1,exp2,…expN 从左往右依次执行,整个表达式结果是最后一个表达式的结果
int main()
 {
    int a = 1; int b = 2; 
    int c = (a>b, a=b+10, a, b=a+1);
    printf("%d",c);
    return 0;
 }  //结果是13

下边引用、函数调用和结构成员

操作符 功能
[ ] 数组下标操作符,操作数:数组名+一个索引值
( ) 函数调用操作符,接受一个或多个操作数:第一个是函数名,其余是函数参数
. 访问结构体成员
-> 访问结构体成员

猜你喜欢

转载自blog.csdn.net/shanghx_123/article/details/78628280