作者前言
作者介绍:
作者id:老秦包你会,
简单介绍:
喜欢学习C语言和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨
个人主页::小小页面
gitee页面:秦大大
一个爱分享的小博主 欢迎小可爱们前来借鉴
_______________________________________________________
______________________________________________________________________
目录
操作符类别
操作符的使用
算术操作符
+ - * / %
* - +等操作符就跟数学的用法一样,这里先不讲,
/ 有两种用法,一种为整数除法,一种为小数除法
#include <stdio.h>
int main()
{int a = 20;printf("%d\n", a / 5);printf("%lf\n", a / 5.0);return 0;
}
%只能是两边只能是整数
移位操作符(针对的是该数的补码)
计算机采用的就是取反,加1的套路
C语言中,内存存一个整数是存它的补码,(整数在内存中存储的是补码),整数在计算的时候使用的也是补码
>>右移运算符
分类:1.逻辑右移
2. 算术右移
这两种右移是由编译器决定的,不能由个人决定,vs编译器是算术右移
#include <stdio.h>
int main()
{int m = 7;int n = 7 >> 1;printf("%d", n);return 0;
}
算术右移:
根据你要移动的位数在最右边舍弃几位,并在最左端补上0,,而负数的,在最左端补上1
逻辑右移:
根据你要移动的位数在最右边舍弃几位,并在最左端补上0
<<左操作符
你要移动的位数在最左边舍弃几位,并在最右端补上0,
位操作符(针对的是该数的补码)
#include <stdio.h>
int main()
{int a = -5;int b = 3;printf("%d\n", a & b);printf("%d\n", a | b);printf("%d\n", a ^ b);return 0;
}
& //按位与
跟数学的与相识,全为真才是真,两数对应的二进制位都为1才是1,其他都是0
-5 & 3==》00000000000000000000000000000011(补码)
| //按位或
跟数学的或相识,有真才是真,全假才为假,两数对应的二进制位只有有一个为1,才是1,全部为0才是0
-5 | 3==》1111111111111111111111111111010 (补码)==》10000000000000000000000000000101 (原码)
^ //按位异或
两数对应的值是一样的就为0,不同就为1
-5^3==>1111111111111111111111111111000(补码) ==》10000000000000000000000000001000(原码)
a^a=a
0^a=a
我们计算两数交互的时候可以利用这个方法来,可以少创建一个变量,这个方法的可读性不高,建议不要使用太多
#include <stdio.h>
int main()
{int a = 5;int b = 6;printf("a=%d b=%d\n", a, b);a = a ^ b;b = a ^ b;a = a ^ b;printf("a=%d b=%d\n", a, b);return 0;
}
需要注意的是,这些操作符适用于整形
赋值操作符
=
从右向左赋值
复合赋值符
+= 、-= 、*= 、/= 、%= 、>>= 、<<= 、&= 、|= 、^=
这些的使用就跟 a = a+b===> a+=b是一样的效果
单目操作符
!是把真变成假,假变成真 变成假是0, 变成真是1
&取地址,
* 解引用操作符
#include <stdio.h>int main()
{int a = 0;printf("%p\n", &a);int* p = &a;int arr[10];int* pa = arr;printf("%p\n", pa);printf("%p\n", &pa);*p = 15;//对p解引用操作,*p是通过p中存放的地址,找到p指向的对象,*p就是aprintf("%d\n", a);return 0;
}
sizeof计算结果返回size_t类型也就是unsigned int (无符号整型) 输出格式是%zd
#include <stdio.h>
int main()
{int arr[10];printf("%zd\n", sizeof arr);printf("%zd\n", sizeof (arr));printf("%zd\n", sizeof (int));printf("%zd\n", sizeof arr / sizeof(int));return 0;
}
sizeof 不是函数,因为函数的引用的()不能省略,
是计算类型或者变量的大小,单位是字节
计算变量大小可以不写(),如果计算类型要保留()
#include <stdio.h>
int main()
{int a = 0;printf("%d\n", ~a);return 0;
}
结果为-1 ,0的补码为00000000000000000000000000000000,~0则是11111111111111111111111111111111,取反加1得到原码为10000000000000000000000000000001
#include <stdio.h>
int main()
{int a = 2;printf("%d", a | (1 << 2));printf("%d", (a | (1 << 2)) & (1 << 2));return 0;
}
++、--都有两种用法,分别是前置和后置
++
前置++:先加1 再使用
后置++;先使用再加1
#include <stdio.h>
int main()
{int a = 0;int b = ++a;printf("a=%d b=%d\n", a, b);b = a++; printf("a=%d b=%d\n", a, b);return 0;
}
--
前置--:先减1 再使用
后置--;先使用再减1
#include <stdio.h>
int main()
{int a = 0;int b = --a;printf("a=%d b=%d\n", a, b);b = a--; printf("a=%d b=%d\n", a, b);return 0;
}
(类型) 强制类型转换
#include <stdio.h>
int main()
{int a = (int)3.14;printf("%d", a);return 0;
}
类型转换尽量能不使用就不使用
关系操作符
逻辑操作符
#include <stdio.h>
int main()
{int a = 1;int b = 0;printf("%d", a && b);printf("%d", a || b);return 0;
}
短路操作
#include <stdio.h>
int main()
{int i = 0,a=0,b=2,c =3,d=4;i = a++ && ++b && d++;//i = a++||++b||d++;printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);return 0;
}
使用&&时只要一方为假另一方就不用算了
使用|| 只要一边为真,另一方就不用算了
总结:
操作符展示到这里了,后面还有一篇介绍下面的,有不懂的小可爱可以私聊我