这样我们就位操作符讲明白了,在给大家补充一点,这些操作符都是双目操作符,什么是双目操作符呢,比如3&5,&两边的操作数分别是3和5,那么&就是双目操作符,大家看到&是不是会想到取地址符号,当然他们肯定是不同的,取地址&是个单目操作符
下面是一个笔试题,不能创建临时变量(第三个临时变量)来交换数
#include<stdio.h> int main() { int a = 20; int b = 10; a = a ^ b; b = a ^ b; a = a ^ b; printf("%d %d", a, b); return 0; }
5. 赋值操作符
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;//连续赋值 这样的代码感觉怎么样? 那同样的语义,你看看: x = y+1; a = x; 这样的写法是不是更加清晰爽朗而且易于调试。
所以我们在给我们的变量赋值的时候一定要看起来至少能让人明白a = x = y+1
像这个代码的话先把y+1赋值给x在赋值给y,这样的可读性并没有分开赋值看起来的明白
复合赋值符
6. 单目操作符
逻辑反操作
相当于把真变成假,把假变成真比如我的if函数中if(1)就是真,但是我们如果加上!就变成if(!1)就是逻辑假
负值和正值
插入一个代码大家马上就能理解
#include<stdio.h> int main() { int a = -4; printf("%d", -a); return 0; }
编译器显示的答案就是4
正值就和我们的正数一样
- . 取地址&
就是取出该变量在我们内存的位置
- sizeof
#include <stdio.h> int main() { int a = -10; int *p = NULL;//定义为空指针 printf("%d\n", !2); printf("%d\n", !0); a = -a; p = &a; printf("%d\n", sizeof(a)); printf("%d\n", sizeof(int)); printf("%d\n", sizeof a);//这样写行不行?可以 printf("%d\n", sizeof int);//这样写行不行?答案是不能 return 0; }
在X86编译器下地址的字节是4位,在64位的平台下,字节大小是8位
sizeof中最难的就是和数组组合,因为大家可能总是会有一个误解,举个例子给大家。
#include <stdio.h> void test1(int arr[]) { printf("%d\n", sizeof(arr));//(2) } void test2(char ch[]) { printf("%d\n", sizeof(ch));//(4) } int main() { int arr[10] = { 0 }; char ch[10] = { 0 }; printf("%d\n", sizeof(arr));//(1) printf("%d\n", sizeof(ch));//(3) test1(arr); test2(ch); return 0; } //问: //(1)、(2)两个地方分别输出多少? //(3)、(4)两个地方分别输出多少?
只要大家知道函数在传数组的时候传过去的首元素的地址,相信大家应该就能理解了,之前的文章也专门讲过,不会的往前看看就行了。
- ~
是按位取反,相当于把一个二进制数1的部分变成0,0的部分变成1
#include<stdio.h> int main() { int a = 2; printf("%d", ~a); return 0; }
- 前置++和–
先++或者–然后再使用
#include<stdio.h> int main() { int a = 1; int b = ++a;//a=a+1 b=a printf("%d %d", a, b); return 0; }
#include<stdio.h> int main() { int a = 1; int b = --a;//a=a-1 b=a printf("%d %d", a, b); return 0; }
后置++和–
#include<stdio.h> int main() { int a = 1; int b = a++;//b=a a=a+1 printf("%d %d", a, b); return 0; }
#include<stdio.h> int main() { int a = 1; int b = a--;//b=a a=a-1 printf("%d %d", a, b); return 0; }
解引用操作符*
一般用在指针,比如想知道指针变量的内容的时候我们就可以用*来知道他的内容,大家是不是可以发现他和&取地址刚刚好相反
()这个符号是强制转换,举个简单的例子
#include<stdio.h> int main() { float a = 5.0; int c = (int)a / 2; printf("%d", c); return 0; }
虽然是浮点型,但是经过我们的强制转换,最后a是一个整型
- 7. 关系操作符
警告:一定要区分==和=
今天的分享就到这里,期待下次和你们见面