接上篇博客
五、单目操作符
何为单目操作符?
像“a+b”中的 ‘+’ 是有两个操作对象的(a和b)成为双目操作符,而只有一个操作对象的成为单目操作符。
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用操作符) (类型) 强制类型转换
主要介绍:
-
“!” 是逻辑取反
#include <stdio.h> int main() { //在C语言中,0表示假,非0表示真,但是非0一般现示为1。 int a = 10; printf("%d\n",!a); //这里a=10,为真,但是'!a'是取反,所以此时输出结果为假,则 输出“0” return 0; }
“!”主要应用场景是
#include <stdio.h>
int main()
{
int a;
if(a)
{
//则...... 如果a满足...则运行...
}
if (!a)
{
//则...... 如果非a条件满足,则运行...
}
return 0;
}
-
"sizeof "指操作数的类型长度(以字节为单位)(在《第一讲C语言课堂后》这篇博客中写过)
举个例子: 打印“sizeof” 时使用“%zu”
#include <stdio.h> int main() { int a = 6; int arr[10] = {0}; printf(“%zu\n”,sizeof(a)); //sizeof 打印出来的是以字节(Byte)为单位的 printf("%zu\n",sizeof(char)); //sizeof 是操作符不是函数其后面的括号可以省略 printf("%zu\n",sizeof(arr)); //int 中每一个所占是4个字节,又因为arr[10]数组中一共 是10个数字所以rr[10]数组一共应该是40字节。 return 0; }
3.“~”是指对一个数的二进制按位取反
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
printf("%d\n",~a); //~a是指对对a取二进制地按位取反
printf("%d\n",~b); //~b是指对对b取二进制地按位取反
return 0;
}
得到的结果是:
原因+举例:(按位取反时不考虑符号位)
//对2取反:先写出2 的二进制,因为int是4字节一个字节占8个比特位,所以2的二进制一共有32位。
0000 0000 0000 0000 0000 0000 0000 0010//(这是 2 的二进制原码)
0000 0000 0000 0000 0000 0000 0000 0010//(这里是其反码)
0000 0000 0000 0000 0000 0000 0000 0010 //(这里是其补码)之所以要转成补码是因为计算机使用补码进 计算
1111 1111 1111 1111 1111 1111 1111 1101//(这里是对其补码取反码,也是“~”所起的作用)结果将作为补码 继续进行计算
1111 1111 1111 1111 1111 1111 1111 1100 //(这里是将补码反推回反码)
1000 0000 0000 0000 0000 0000 0000 0011 //转为十进制位‘-3’
//以上为对b取反操作的结果
//0较为特殊,0既非正也非负,如下:
0000 0000 0000 0000 0000 0000 0000 0000 //(0的二进制原码)
1111 1111 1111 1111 1111 1111 1111 1111 //(补码)
1111 1111 1111 1111 1111 1111 1111 1110 //由补码推回反码)
1000 0000 0000 0000 0000 0000 0000 0001 //转为十进制“-1”
//简介计算取反:正数+1后整体变负数,负数+1取绝对值。
4."++“和”–"分别是前置、后置++前置、后置–
#include <stdio.h>
/*int main()
{
int a = 10;
int b = ++a; //此时应是先执行‘++’,再使用‘a’。所以b先变为11,然后a再成为11。
printf("%d %d",a, b);
return 0;
}*/
int main()
{
int a = 10;
int b = a++; //此时先使用a,再使用‘++’
printf("%d %d", a, b);
return 0;
}
//”--“与”++“用法同理
六、关系操作符
>
>=
<
<=
!= 用于测试“不相等”
== 用于测试“相等”
都是数学中常见的运算符号,不做多解释。
七、逻辑操作符
&& 逻辑与
|| 逻辑或
其意思相当于数学中的”且“和”或“
#include <stdio.h>
int main()
{
int a = 3;
int b = 5;
int c = a&&b; //&&要求两者同时成立,表示”真“(用1表示),反之为”假“(用0表示)
printf("%d\n",c); //如果两者同时成立则为1,反之为0.
return 0;
}
#include <stdio.h>
int main()
{
int a = 0;
int b = 5;
int c = a||b; //这里要求a或b其中一个成立,则表达式就可以为真。
return 0;
}
八、条件操作符
exp1 ? exp2 : exp3 //意思为,如果exp1成立,则结果为exp2;反之为exp3。
使用:
#include <stdio.h>
int main()
{
int a = 9;
int b = 6;
int max = 0;
//if (a < b)
// max = b;
//else
// max = a;
//被注释的代码可以改成:
max = a < b ? b : a;
printf("%d\n", max);
return 0;
}
九、逗号表达式
exp1, exp2, exp3, …expN
使用:
#include <stdio.h>
int main()
{
int a =1;
int b =3;
int c= 5;
int d =(a=b+c, b=a+c, c=a-b); //逗号表达式以最后一项为输出结果
printf("%d\n",d);
return 0;
}
十、下标引用、函数调用和结构成员
[] () . ->
主要介绍 [] ,
#include <stdio.h>
int main()
{
int arr[9]={1,2,3,4,5,6,7,8,9};
printf("%d\n",arr[2]); //对于数组从0,1,2......开始编码,因此arr[2]是数组里的3
return 0;
}
终于整理完初始操作符了,差点就要到第二天了。