C语言操作符总结

C语言操作符总结

目录

* 1.操作符的分类

* 2.表达式求值

一.操作符的分类

1、算数操作符

  除以一个变量,该变量的值为0,会导致运行时出错。
  除以一个常量0,编译器就会编译错误。

2、移位操作符

  计算机上的信息都是按照二进制存储的,左移<<2相当于*2(左侧丢弃,右侧补0),右移>>2分为逻辑右移:左侧补0和算术右移:左侧补符号位(相当于/2),右移大多都是算术右移。
  左移n位:*2^n

3、位操作符

  &:按位与,有0则0
  |:按位或,有1则1
  ^:按位异或,同0异1
  ~:按位取反,01互换
  不创建临时变量,实现两个数的交换
#include<stdio.h>
int main()
{
 	int a = 10;
 	int b = 20;
 	a = a^b;
 	b = a^b;
	a = a^b;
 	printf("a = %d b = %d\n", a, b);
	 return 0;
}
  一个整数存储在内存中的二进制中1的个数(通过移位)
#include <stdio.h>
int main()
{
 	int num = -1;
 	int i = 0;
	int count = 0;//计数
	 while(num)
 	{
 		count++;
 		num = num&(num-1);
	 }
	 printf("二进制中1的个数 = %d\n",count);
	 return 0;
}

4、赋值操作符

  初始化和赋值不同,常量可以赋值但不能初始化,数组可以用{}进行初始化,但不能用{}进行赋值
  描述格式化字符串时需要有三个部分,几进制,有无符号,整数/浮点数
  eg:%d:十进制 有符号 整数,%x:十六进制 无符号 整数

5、单目操作符

  sizeof不是函数,而是一个操作符,表示操作数的类型长度(以字节为单位),可求变量(类型)所占空间的大小。
  sizeof编译时直接求值,没有涉及到内存访问,所以int arr[10]中sizeof(arr[10])=4
  如果不取表达式的值,前置和后置是等价的,如果取值的话,前置++返回的是自增之后的值,后置++返回的是自增之前的值。
	++num:
		num += 1;
		return num;
		
	num++:
		int tmp = num;
		num += 1;
	return tmp;
  后置++需要引入一个临时变量,所以前置++效率更高。

6、关系操作符

  所有关系操作符的结果只有两个:0或1.

7、逻辑操作符

  在C语言中可以使用宏来定义逻辑操作符。
#define and &&
#define or ||
  短路求值:
    对于&&,如果左侧的表达式值为假,那么右侧的表达式不在求值。
    对于||,如果左侧的表达式值为真,那么右侧的表达式不在求值。

8、条件操作符

  C语言中唯一一个三目运算符,相当于if-else的简写。

9、逗号表达式

  逗号表达式的值是最后一个参数的值。

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

  数组下标引用:一个数组名+[一个索引值]。
  ( ) 函数调用操作符 接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
  访问一个结构体成员:. 结构体.成员名 或 -> 结构体指针->成员名

二.表达式求值

1、隐式类型转换

  隐式类型转换=类型转换+整型提升。
  类型转换优先级:long double>double>float>unsigned long int>long int>unsigned int>int
  比int更小的类型就会产生整型提升
    类似于char/short这样的类型,参与算数运算的时候会触发 整型提升(隐式转换为int,再参与运算) ,比int小的类型都要转换为int进行操作,整型提升主要受限于CPU的具体结构。
  类型转换产生的问题:
    把一个占内存大的变量赋值为一个内存小的变量——会触发截断
    把一个占内存小的变量赋值为一个内存大的变量——高位会进行补位(补符号位)

2、 操作符的属性

  优先级不用管,直接加括号就行了。
  如果在一个表达式中多次修改同一个变量,这样的结果是未定义行为(所以,不能这样写),主要是因为表达式求职顺序不一致
  注意表达式求值顺序
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值