C语言学习笔记

250 阅读2分钟

​「这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战」。

算术操作符

+  -  *  /  %

1.除了%之外,其他的几个操作符可以作用于整数与浮点数。

2.%的两个操作数必须为整数。

移位操作符

右移操作符: >> (有÷2的效果)
1.算术右移:右边丢弃,左边补原符号位
2.逻辑右移:右边丢弃,左边补0

int main()
{
	int a = 16;
	//>> -- 右移操作符
	//移动的是二进制位
	//00000000000000000000000000010000
	 int b = a >> 1;
	 printf("%d", b);
	return 0;

}


int main()
{
	int a = -1;
	//整数的二进制表示有:原码,反码,补码
	//存储到内存中的是补码
	//10000000000000000000000000000001 -- 原码
	//11111111111111111111111111111110 -- 反码
	//11111111111111111111111111111111 -- 补码
	 int b = a >> 1;
	 printf("%d", b);
	return 0;

}

左移操作符: << (有×2的效果)

左边丢弃,右边补0

注:对于移位操作符,不要移动负数位,这个是标准未定义的。且只能作用于整数

位操作符

  1. & 按位与

规则:

1&1=1

1&0=0

0&1=0

0&0=0

int main()
{
	 //& - 按2进制位与
	int a = 3;
	int b = 5;
	int c = a & b;
	//000000000000000000000000000000011 有一个是0就是0,两个都为1才是1
	//000000000000000000000000000000101
	//000000000000000000000000000000101
	printf("%d", c);
	return 0;
}

  1. | 按位或

规则:

1|1=1

1|0=1

0|1=1

0|0=0

int main()
{
	 //| - 按2进制位或
	int a = 3;
	int b = 5;
	int c = a | b;
	//000000000000000000000000000000011 有一个是1就是1,两个都为0才是0
	//000000000000000000000000000000101
	//000000000000000000000000000000111
	printf("%d\n", c);
	return 0;

^ 按位异或

规则:

1^1=0

1^0=1

0^1=1

0|0=0

int main()
{
	 //^ - 按2进制位异或
	int a = 3;
	int b = 5;
	int c = a ^ b;
	//000000000000000000000000000000011 相同为0,相异为1
	//000000000000000000000000000000101
	//000000000000000000000000000000110
	printf("%d\n", c);
	return 0;
}

例:交换两个int变量的值,不能使用第三个变量。即a=3,b=5,交换后a=5,b=3

法一

int main()
{
	int a = 3;
	int b = 5;
	a = a + b;
	b = a - b;
	a = a - b;
	printf("a=%d b=%d\n", a, b);
	return 0;
}

法二:

int main()
{
	int a = 3;
	int b = 5;
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("a=%d b=%d", a, b);
	return 0;
}

赋值操作符

=

复合赋值操作

复合赋值运算符有下列这些:

+= 加法赋值

-= 减法赋值

*= 乘法赋值

/= 除法赋值

%= 模运算赋值

<<= 左移赋值 &= 位逻辑与赋值

|= 位逻辑或赋值

^= 位逻辑异或赋值

单目操作符

a+b :+双目操作符

单目操作符:只有一个操作数

!                逻辑反操作

-                  负值

+                 正值

&                 取地址

sizeof          操作数的类型长度

~                 对一个数的二进制按位取反

--                 前置、后置--

++                前置、后置++

*                  间接访问操作符(解引用操作符)

(类型)     强制类型转换