赋值操作符
我们常见的操作符有:
| = | += | -= | *= | /= | &= | ^= | |= | >>= | <<= |
上面的就是我们常见的赋值操作符,我们使用方法就是:
a=a+3就是a+=3
a=a%3就是a%=3
a=a^b就是a^=b
单目操作符
单目操作符:顾名思义就是对一个目标的操作符。我们常见的+-*/都是双目操作符,它是有两个目标的。我们常见的单目操作符有!、+、-、&、sizeof、~、++、--等
!表示的是非的意思。
#includeint main() { int a = 100; printf("%dn", !a); return 0; }
在我们计算机里面我们一般默认1为真,0为假,假如当我们输入的时候,非0的均为真值,我们通过上面的代码我们知道,我们输入的a为100,为真值,那么!a就是假值,我们计算机默认的假值为0,所以我们输出的就是0.
+、-使用在我们的赋值,代表数字的正负。
#includeint main() { int a = 10; int b = -a; int c = +a; printf("%dn", b); printf("%dn", c); return 0; }
我们知道b=-10,c=10.
&我们在scanf函数的后面使用过,它代表取后面数字的位置。
#define _CRT_SECURE_NO_WARNINGS 1 #includeint main() { int a; int b; scanf(" %d %d", &a, &b); int sum = a + b; printf("%dn", sum); return 0; }
上面,我们scanf函数使用&a、&b,后面我们输入的两个数字就与前面a和b关联在了一起。
sizeof:一个求数据长度的一个操作符,而不是函数。
#includeint main() { int a; printf("%dn", sizeof(a)); return 0; }
我们知道int的是4个字节,所以我们输出的就是4
#includeint main() { int arr[10] = { 1,2,2,3 }; printf("%dn", sizeof(arr)/sizeof(arr[1])); return 0; }
我们输出的数是数组长度除以数组中间一个元素的长度,因为我们元素长度都相同,所以我们输出的是元素的个数,我们阅读上面的代码我们知道有10个元素,所以我们输出的就是10。
~对一个数的二进制按位取反
我们~就是表示将原来数字里面的1变成0、0变成1.
#includeint main() { int a = 0; printf("%dn", ~a); return 0; }
我们的结果为-1.
我们知道int a=0在二进制里面表示为:
00000000,00000000,00000000,00000000
那么~a就是:
11111111,11111111,11111111,11111111
但是这个二进制为什么是-1呢?
在计算机里面我们二进制数字数的储存方法有3种:原码、反码、补码。
我们在内存里面一般存储的就是补码,我们打印出来的一般是原码,正整数的原码、反码、补码都是相同的,都是负数符合下面的计算规则:
我们int有32个比特位,我们第一位是符号位(1代表为负数,0代表为正数),所以-1的原码就是:
10000000,00000000,00000000,00000001
我们反码就是符号位不变,其它全部取反,所以我们的反码就是:
11111111,11111111,11111111,11111110
补码就是将二进制序列加1就可以了,所以我们补码就是:
11111111,11111111,11111111,11111111
所以这个就是我们内存里面的数字,也就是-1.
++与-- (自增和自减)
#includeint main() { int a = 5; int b = a++; printf("%dn", a); printf("%dn", b); return 0; }
后置++int b=a++表示的是先b=a,然后a=a+1。所以上面我们程序运行的结果为6、5。
#includeint main() { int a = 5; int b = ++a; printf("%dn", a); printf("%dn", b); return 0; }
前置++int b=++a表示的是先a=a+1,然后b=a。所以上面程序的结果就是5、6,自减和自加的原理也是一样的。
关系操作符
我们C语言有判读两个数大小关系的语句:
| > | 大于 |
| < | 小于 |
| >= | 大于等于 |
| <= | 小于等于 |
| == | 等于 |
| != | 不等于 |
逻辑操作符
| && | 与 |
| || | 或 |
#includeint main() { int a = 3; int b = 4; int c = a && b; printf("%dn", c); return 0; }
上面这段代码,我们知道当我们输入是非0的都是真,所以a/b均为真,所以a并b也是真,所以相同默认输出为真,所以输出0。
#includeint main() { int a = 3; int b = 0; int c = a || b; printf("%dn", c); return 0; }
上面这行代码,输入b为假,都是我们是a或者b,我们a为真,所以我们输出就是真,系统默认就是输出为1。
条件操作符(三目操作符)
exp1?exp2:exp2
上面这个语句代表的意思是:看exp1这个语句是否正确,假如exp1是真,那么我们就按exp2来进行计算,假如exp1为假,那么我们就按exp3来计算。
#includeint main() { int a = 3; int b = 4; int max=a > b ? a : b; printf("最大值是%dn", max); return 0; }
我们就可以通过上面这行代码来代替原本的if else判断:
#includeint main() { int a = 3; int b = 4; int max; if (a > b) max = a; else max = b; printf("最大值是%dn", max); return 0; }
逗号表达式
假如我们遇见了一行逗号表达式:exp1,exp2,exp3,我们按前后顺序计算并同时更新前面计算的数据就可以了。
#includeint main() { int a = 3; int b = 4; int c = 5; int d = 100; int f = (c = a + b, d = c + a, f = c + d); printf("%dn", f); return 0; }
我们按照上面的顺序计算就可以了,c=3+4=7,d=7+3=10,f=7+10=17,所以我们的结果就是17。



