初识操作符2


接上篇博客

五、单目操作符

何为单目操作符?

像“a+b”中的 ‘+’ 是有两个操作对象的(a和b)成为双目操作符,而只有一个操作对象的成为单目操作符。

!           逻辑反操作
-           负值
+           正值
&           取地址
sizeof      操作数的类型长度(以字节为单位)
~           对一个数的二进制按位取反
--          前置、后置--
++          前置、后置++
*           间接访问操作符(解引用操作符) (类型)       强制类型转换

主要介绍:

  1. “!” 是逻辑取反

    #include <stdio.h>
    int main()
    {                               //在C语言中,0表示假,非0表示真,但是非0一般现示为1。
        int a = 10;
        printf("%d\n",!a);          //这里a=10,为真,但是'!a'是取反,所以此时输出结果为假,则                                   输出“0”
        return 0;
    }
    

image-20220406212417996

“!”主要应用场景是

#include <stdio.h>
int main()
{
	int a;
	if(a)
	{
		//则......                如果a满足...则运行...
	}             
	if (!a)
	{
		//则......                如果非a条件满足,则运行...
	}
	return 0;
}
  1. "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;
    }
    

    image-20220406214245724

​ 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;
}

得到的结果是:

image-20220406215518863

原因+举例:(按位取反时不考虑符号位)

//对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;
}
//”--“与”++“用法同理

image-20220406230921334

image-20220406231452133

六、关系操作符

>
>=
<
<=
!=      用于测试“不相等”
==      用于测试“相等”

都是数学中常见的运算符号,不做多解释。

七、逻辑操作符

&&          逻辑与
||          逻辑或

其意思相当于数学中的”且“和”或“

#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;
}

image-20220406232514671

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 5;
    int c = a||b;     //这里要求a或b其中一个成立,则表达式就可以为真。
    return 0;
}

image-20220406233123812

八、条件操作符

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;
}

image-20220406234152539

九、逗号表达式

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;
}

image-20220406234916490

十、下标引用、函数调用和结构成员

[]   ()   .   ->

主要介绍 [] ,

#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;
}

image-20220406235318985


终于整理完初始操作符了,差点就要到第二天了。

  • 13
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值