单目操作符也就是只有一个操作数的操作符,在运算时优先级也是比较高的,下面就一起来看看单目运算符的具体用法吧!

一、单目操作符:

单目运算符只有一下几个。

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

二、!运算符:

!是逻辑反操作,作用是真变假,假变真。

//!操作符
#include<stdio.h>
int main()
{
    int flag = 5;
    //该表达式是flag为真进入判断
    if (flag)
    {
        printf("hehe\n");
    }

    //该表达式是flag为假进入判断
    if (!flag)
    {
        printf("haha\n");
    }
    return 0;
}

三、&操作符:

该操作符的作用是取地址。

//&操作符
#include<stdio.h>
int main()
{
    int a = 10;
    int* p = &a;//拿到a的地址,存放在指针变量p中

    int arr[10];
    int* parr = &arr;//&数组名是拿到数组的地址

    printf("%p\n", p);//打印结果为:0000002A7E8FF914
    printf("%p\n", parr);//打印结果为:0000002A7E8FF958
    //%p是以地址的形式打印

    *p = 20;//*是解引用操作符,也叫间接访问操作符
    //通过p间接访问到a,并把20赋给a

    printf("%d\n", a);//打印结果为:20
    return 0;
}

四、sizeof操作符:

该操作符的作用是求类型长度。

//sizeof操作符
#include<stdio.h>
int main()
{
    int a = 10;
    printf("%d\n", sizeof(a));//打印结果为:4
    printf("%d\n", sizeof a);//打印结果为:4
    printf("%d\n", sizeof(int));//打印结果为:4
    printf("%d\n", sizeof 10);//打印结果为:4
    //哪种写法都可行,但是int两端的括号不能省略
    //变量名两端的括号可以省略

    int arr[10] = { 0 };
    printf("%d\n", sizeof(arr));//打印结果为:40
    printf("%d\n", sizeof arr);//打印结果为:40
    printf("%d\n", sizeof(int[10]));//打印结果为:40
    //数组的类型是int[]
    //数组名一般是数组首元素的地址,但是&数组名和sizeof(数组名)除外
    //&数组名取出的是数组的地址
    //sizeof(数组名)计算的是数组的总大小
    
    //计算数组中的元素的大小                                                                                                                                                                                                                                                                                                                           
    printf("%d\n", sizeof(arr[0]));//打印结果为:4
    printf("%d\n", sizeof arr[0]);//打印结果为:4
    
    //利用sizeof求数组元素个数
    //用数组总大小除以任意一个元素的大小就是数组元素个数
    int sz = sizeof(arr) / sizeof(arr[0]);
    printf("%d\n", sz);//打印结果为:10
    return 0;
}

sizeof与strlen的区别:

sizeof是单目操作符,功能是求操作数类型的长度,计算的是变量所占内存空间的大小,单位是字节。

strlen是字符串操作函数,功能是计算字符串的长度,遇到\0停止计算,单位是个,使用时需要引用头文件。

五、~操作符:

该操作符的作用是对一个数的二进制为按位取反。

//~操作符
#include<stdio.h>
int main()
{
    int a = 0;
    //~的作用是对一个数的二进制为按位取反,0变1,1变0
    //a的二进制是00000000 00000000 00000000 00000000
    //~a的二进制补码是11111111 11111111 11111111 11111111
    //~a的二进制反码是10000000 00000000 00000000 00000000
    //~a的二进制原码是10000000 00000000 00000000 00000001
    printf("%d\n", ~a);//打印结果为-1

    //二进制中,如果是全0,则结果为0,如果是全1,结果是-1
    return 0;
}

~的作用是将一个数的二进制位按位取反,即0变1,1变0。

在二进制中,如果补码全0,则原码为0。如果补码全1,则原码为-1。

六、--、++操作符:

这个操作符分为前置++、--和后置++、--,它们的运算计算规则,优先级也不一样。

//--和++操作符
#include<stdio.h>
int main()
{
    int a = 10;
    int b = a++;
    //该表达式相当于b = a; a = a + 1; 

    //++前置时是先加加后赋值
    //++后置时是先赋值后加加

    int c = --b;
    //该表达式相当于b = b - 1; c = b;

    //--前置时是先减减后赋值
    //--后置时是先赋值后减减

    printf("%d\n", b);//打印结果为9
    printf("%d\n", c);//打印结果为9
    return 0;
}

七、(类型)操作符:

该操作符的功能是强制类型转换。

//(类型)操作符
#include<stdio.h>
int main()
{
    float f = 3.14f;
    int a = f;//如果将浮点数的值直接赋值给整型值,结果会丢失数据
    printf("%d\n", a);//打印结果为3

    //此时可以将浮点型强制类型转换为整型
    int b = (int)f;
    printf("%f\n", f);//打印结果为3.140000
    //可以看出强制类型转换只是一种临时的状态,并不会真正改变变量的值
    return 0;
}

 以上就是我这次的分享了,写的不好,请多担待。