单目操作符也就是只有一个操作数的操作符,在运算时优先级也是比较高的,下面就一起来看看单目运算符的具体用法吧!
一、单目操作符:
单目运算符只有一下几个。
! //逻辑反操作
- //负值
+ //正值
& //取地址
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;
}
以上就是我这次的分享了,写的不好,请多担待。