“C语言操作符”

操作符

算数操作符:+ - * / % 加减乘除为基本操作,%为取模;/ 和 %的区别是:/为取商,%为取余数;%只用于两个整数。/在运算时,两个数都为整型是进行整型除法,只要有一个浮点型,就进行浮点型除法。
移位操作符:<<左移操作符,>>右移操作符;
左移操作符移位规则:左移表示2进制数的32个bit位向左移动一位,左边丢掉,右边补0

int num = 10;
	num = num << 1;

如上:num所表示的2进制数为00000000000000000000000000001010 (10)
num左移一位的结果为 00000000000000000000000000010100 (20)
右移操作符移位规则:
1.逻辑右移:左边用0填充,右边舍弃
2.算数右移:左边用原符号位填充,右边舍弃

int num = -1;
	num = num>>1;

原num所表示的2进制数的补码:11111111111111111111111111111111
逻辑右移后的2进制数的补码为:01111111111111111111111111111111
可以发现逻辑右移后的符号发生变化。
算数右移后的2进制数的补码为:11111111111111111111111111111111
右边舍弃一个1,右边因为符号为-,所以用1表示,补一个1

int num = 10;
num >> -1;  //error

移位运算中,不要移动负数位,这是标准未定义的

位操作符
& 按位与
| 按位或
^ 按位异或
注意:它们的操作数必须为整数。
赋值操作符:=
可以赋值一个常量或常量表达式

int a = 10
int b = a + 1;

复合赋值符:
+=、*=、/=、%=、>>=、<<=、&=、|=、^=
单目操作符
! 逻辑反操作符(非) - 负值 + 正值
& 取地址
sizeof操作数的类型长度(以字节为单位)
~对一个二进制数取反
– 前置后置–
++ 前置后置++
*间接访问操作符(解引用操作符)
(类型) 强制类型转换
关系操作符

=、<=、>、<、
!= (用于测试“不相等”)
==(用于测试“相等”)

注意:=与==的用法,容易导致程序的结果错误

逻辑操作符
&& 逻辑与 两个条件都满足为真
|| 逻辑或 两个条件满足1个为真

条件操作符
exp1?exp2 : exp3

eg:(a>5)?3:-3

逗号表达式
exp1,exp2,exp3…expn
逗号表达式就是用逗号隔开的多个表达式。逗号表达式从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
下标引用、函数调用和结构成员
1.[]下标引用操作符
操作数:一个数组名+一个索引值

int arr[10];
arr[9] = 10;

[]的两个操作数是arr和9。
2.()函数调用操作符,接收一个或者多个操作数:第一个操作数是函数名,剩余的操作符就是传递给函数的参数。

#include <stdio.h>
void test1()
{
	printf("%s\n",*str);
}
int main()
{
	test1("hello world!");
	return 0;
}

3.访问一个结构的成员
. 结构体.成员名 ->结构体指针->成员名
操作符的属性
复杂表达式的求值有三个影响的因素。
1.操作符的优先级
2.操作符的结合性
3.是否控制求值顺序
两个相邻的操作符先操作优先级高的,如果优先级相同,取决于它们的结合性。(不一定能准确判断出值)

总结:如果写出的表达式如果不能通过操作符的属性确定唯一的计算路径,那这个表达式就是存在问题的。

猜你喜欢

转载自blog.csdn.net/Thinker_serious/article/details/83111259
今日推荐