C语言单目操作符
运算符 | 含义 |
---|---|
! | 逻辑取反操作 |
– | 负值 |
+ | 正值 |
& | 取地址 |
sizeof | 操作数的类型长度(以字节为单位) |
~ | 对一个数的二进制按位取反 |
–– | 前置、后置– |
++ | 前置、后置++ |
* | 间接访问操作符(解引用操作符) |
(类型) | 强制类型转换 |
1. 逻辑反操作 !
在C语言中真和假分别使用 0 和 非0 来表示。
!即将假变为真,将真变为假
#include <stdio.h>
//在C语言中真和假分别使用 0 和 非0 来表示
int main(){
int num1 = 0;
int num2 = 10;
printf("%d\n", num1); //显然这里将会打印0
printf("%d\n", !num1); //逻辑取反操作后这里将会打印1(C语言规定)
//那么若number为非零数,! 取反操作后将会变为1,表示为假
printf("%d\n", num2); //输出结果为10
printf("%d\n", !num2); //输出结果为0
}
2.负值操作 - 和正值操作 +
#include <stdio.h>
//将数字进行取负号操作
int main(){
int num1 = 100;
int num2 = -num1; //显然num2的值即为-100
printf("%d\n", num2);
//C语言中+号并不会反转,在实际中很少出现
}
3.sizeof
表示计算出大小,那么可计算的对象是其所占内存空间的大小
注意sizeof并不是函数,并且在使用中必须使用圆括号 ()
#include <stdio.h>
int main(){
int a = 10; //a在内存空间中占4个字节
printf("%d\n", sizeof(a));
printf("%d\n", sizeof(int)); //也可以计算类型大小(单位:字节Byte)
printf("hello world!\n");
printf("%d\n", sizeof(char)); //1 (字节)
printf("%d\n", sizeof(int)); //4
printf("%d\n", sizeof(short)); //2
printf("%d\n", sizeof(long)); //4
printf("%d\n", sizeof(long long)); //8
printf("%d\n", sizeof(float)); //4
printf("%d\n", sizeof(double)); //8
// 对于数组类型,那么计算的使该数组的总大小
int arr1[10] = {0};
printf("%d\n", sizeof(arr1)); //计算出该数组的总大小40
printf("%d\n", sizeof(arr1[0])); //这里计算的是数组第一个元素的大小为4
//因数组每个元素的类型是相同的,那么显然可以计算数组元素的个数,即数组总大小 / 单个元素大小 = 数组中元素的个数
}
这里sizeof 和 strlen库函数有一定相同的作用,例如去求一个字符串的长度(大小)
#include <stdio.h>
int main(){
char arr1[] = "aaa";
char arr2[] = {'a','a','a'};
printf("%d\n", sizeof(arr1)); //4
printf("%d\n", sizeof(arr2)); //3
printf("%d\n", strlen(arr1)); //3
printf("%d\n", strlen(arr2)); //42
/*字符串的结尾处默认会有\0,而这并不会在字符串中显示,sizeof关心实际拥有的元素个数
strlen是库函数,用来求字符串的长度,在遇到'\0' 会自动停止,返回的是截止到空字符之前的元素个数
因此在求arr2时,该数组在内存中分布并没有包含'\0',因此将一直向后检索,知道遇到空字符停止,其结果将会是一个无法预料的随机数
*/
}
运行结果如下:
4.自增自减运算
前置:先++(- -),后使用
后置:先使用,后++(- -)
#include <stdio.h>
int main(){
//示例如下
int a = 1;
int b = (++a) + (++a) + (++a); //这样的代码方式本身就过于复杂,在不同编译器上的结果是不同的()
printf("b = %d", b);
}