目录
1.赋值操作符
赋值操作符是一个很棒的操作符,他可以让你得到一个你之前不满意的值。也就是你可以给自己重新赋值。
int weight = 120;//体重
weight = 89;//不满意就赋值
double salary = 10000.0;
salary = 20000.0;//使用赋值操作符赋值。
虽然编译器支持连续赋值,但不建议经常采用。
赋值操作符可以连续使用,比如:
int a = 10;
int x = 0;
int y = 20;
a = x = y+1;//连续赋值
复合赋值符
2.单目操作符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
单目操作符:只要一个操作数。
双目操作符:例如a+b,+号即为双目操作符,有两个操作数。
! 逻辑反操作
把真的变成假的,把假的变成真的。(0为假,非0为真)
& 取地址
a占四个字节,每个字节都有地址,&a,取的是a的这四个字节里面第一个字节的地址,即起始地址。
sizeof 操作数的类型长度(以字节为单位)
sizeof是操作符不是函数
strlen是库函数,是用来求字符串长度的
~ 对一个数的二进制按位取反
~ 有什么作用呢?
可以对某些不满意的数进行修改。
例1:
int a = 13;
a = a | (1 << 1);
//00000000 00000000 00000000 00001101 a的补码
//能不能把倒数第二位的0改成1?
//在倒数第二位给它或上一个1
//00000000 00000000 00000000 00001101
//00000000 00000000 00000000 00000010 //这个可以理解位1<<1(1向左移动一位)
// 或
//00000000 00000000 00000000 00001111
printf("%d\n", a);
运行结果是:
例2:
例3:
++ -- 前置、后置++ --
* 间接访问操作符(解引用操作符)
![](https://i-blog.csdnimg.cn/blog_migrate/787eccd30ca6c75ed8860a6b27ba4b8a.png)
(类型) 强制类型转换
sizeof和数组
//siaeof是操作符不是函数
//strlen是库函数,是用来求字符串长度的
#include <stdio.h>
void test1(int arr[])//arr[]本质上是指针
{
printf("%d\n", sizeof(arr));//(2)计算的结果为4或8
}
void test2(char ch[])
{
printf("%d\n", sizeof(ch));//(4)计算的结果也是4或8
}
int main()
{
int arr[10] = { 0 };
char ch[10] = { 0 };
printf("%d\n", sizeof(arr));//(1)计算的是整个数组的大小 40
printf("%d\n", sizeof(ch));//(3)计算的是也整个数组的大小 10
test1(arr);
test2(ch);
return 0;
}
//问:
//(1)、(2)两个地方分别输出多少?
//(3)、(4)两个地方分别输出多少?
输出结果是:
指针不管是什么类型,所占字节数都是4或8;所以无论是int型的地址,还是char型的地址,所占的字节数都是4或8,所以(3)(4)输出结果是4。
3.关系操作符
注意一些运算符使用时候的陷阱。例如,在编程的过程中== 和=不小心写错,导致的错误。