先赞再看,养成习惯!!!你的支持是对我最大帮助!
操作符
单目操作符
单目操作符 | 作用 |
---|---|
! | 反逻辑操作符 |
- | 负值 |
+ | 正值 |
& | 取地址 |
sizeof | 操作数的类型长度(以字节为单位) |
~ | 对一个数的二进制按位取反 |
-- | 前置、后置-- |
++ | 前置、后置++ |
* | 间接访问操作符(解引用操作符) |
(类型) | 强制类型转换 |
用法
#include<stdio.h>
// ! - +
int main()
{
int a = -2; // 负号
int b = +10;// 通常正号省略
int c = 0;
printf("%d\n",a); // 输出 -2
printf("%d\n",b); // 输出 11
printf("%d\n",!b);// 输出 0 (10为真,非真为假)
printf("%d\n",c);;// 输出 0
printf("%d\n",!c);// 输出 1 (0为假,非假为真)
//在C语言中 0 为假,其他数为真
return 0;
}
#include<stdio.h>
#include<string.h>
// sizeof()
int main()
{
int sz = 0;
int a = 1;
//sizeof 计算的是变量/类型所占空间大小,单位为字节
printf("%d\n",sizeof(a)); // 输出 - 4
printf("%d\n",sizeof(int));// 输出 - 4
int arr[10] = {0};
printf("%d\n",sizeof(arr));// 输出 - 40 输出的是字节总大小
//10*sizeof(int) = 40
//计算数组的元素个数
//个数 = 数组总大小/每个元素的大小
sz = sizeof(arr) / sizeof(arr[1]);
printf("%d\n",sz);
return 0;
}
#include<stdio.h>
// ~ -- 按位取反(二进制)
int main()
{
int a = 0; // 4个字节 -- 32比特位
int b = ~a; // b是有符号的整形(如果是一个有符号的整形,最前面的一位是符号位,0为正,1为负 )
// ~ -- 按位取反(二进制)
// 1变0,0变1
// a -二进制-> 00000000000000000000000000000000
// ~a -二进制-> 11111111111111111111111111111111
//原码、反码、补码
//负数在内存中储存的时候,储存的是二进制的补码
// 11111111111111111111111111111111 补码
// 补码减1,得到原码
// 11111111111111111111111111111110 反码
// 符号位不变,其他位按位取反
// 10000000000000000000000000000001 原码
printf("%d\n",b);// 输出 -1
// 我们使用的、打印的是这个数的原码
return 0;
}
#include<stdio.h>
// ++
int main()
{
int a = 10;
int b = a++;//后置++,先使用,再++
printf("a = %d b = %d\n",a,b); // 输出 a = 11 b = 10
a = 10;
int c = ++a;//前置++,先++,再使用
printf("a = %d c = %d\n",a,c); // 输出 a = 11 b = 11
return 0;
}
#include<stdio.h>
// --
int main()
{
int a = 10;
int b = a--;//后置--,先使用,再--
printf("a = %d b = %d\n",a,b); // 输出 a = 9 b = 10
a = 10;
int c = --a;//前置--,先--,再使用
printf("a = %d c = %d\n",a,c); // 输出 a = 9 b = 9
return 0;
}
#include<stdio.h>
int main()
{
int a = 3.14; //出现警告 “从‘double’转到‘int’,可能丢失数据”
printf("%d\n",a);// 也可能不出现警告,但会只保留整数(此输出 3)
//如果想强制改类型,就用 (类型)
a = (int)3.14;
printf("%d\n",a); // 这样就不会出现警告了
return 0;
}