- 单目操作符
单目操作符只用一个操作数。
常见的单目操作符:
逻辑反操作: !
负值: -
正值: +
取地址: &
操作数的类型长度(以字节为单位): sizeof
对一个数的二进制位按位取反: ~
前置、后置减减: - -
前置、后置加加: ++
间接访问操作符: *
强制类型转换 :( 类型 )
使用规则:
逻辑反操作( ! ):
在原来的基础上取逻辑反操作。即:把原来的真的变成假的( 真 --> 假 ),原来的假的变成真的( 假 --> 真 )。
例:
! 0 == 1; ! 1 == 0;
负值( - ):
在原数字的基础上取负操作。即:把原来的 正值 变为 负值 ,负值 变为 正值。
例:
int num = 5; -num == -5;
正值( + ):
保持原数字的正负。
取地址( & ):
//例1:打印 num 的地址
#include<stdio.h>
int main()
{
int num = 0;
printf("%p\n", &num); // %p 打印地址,
printf("%x\n", &num); // %x 以十六进制数字打印
return 0;
}
注: %p 打印地址时会把所有的位都打印出来; %x 打印地址时只会打印有效位,无效位会自动省略。
操作数的类型长度(以字节为单位): sizeof
首先来看一段代码:
#include<stdio.h>
int main()
{
int a = 10;
short s = 2;
printf("%d\n", sizeof(s = a + 3)); // 这里输出多少?
printf("%d\n", s); // 这里输出多少?
system("pause");
return 0;
}
下面解释一下为什么输出结果都是:2
由于 sizeof 不是函数,所以 sizeof ( s = a + 3 );这里的 ( s = a + 3 ) 不是参数,所以就不参与计算,故 两个都是输出 s 的初值。
如果 sizeof 后加一个数组名,那么 sizeof 计算的是数组总大小,单位是字节。如:
#include<stdio.h>
int main()
{
int arr[10] = { 0 };
printf("%d\n", sizeof(arr)); // 这里的数组名(arr)代表整个数组
printf("%d\n", sizeof(arr + 0)); //这里的数组名(arr)代表的是首元素的地址
system("pause");
return 0;
}
特别注意:
&arr:表示的是整个数组的地址;
sizeof ( arr ):表示求整个数组的大小;
只有在这两种情况下,数组名( arr )代表的是整个数组,其余所有情况下数组名( arr )代表的都是数组首元素的地址。
前置、后置 ++:
前置 ++ :先进行自增,然后使用;
如:
#include<stdio.h>
int main()
{
int a = 10;
int x = ++a;
// 前置++:先对 a 进行自增,然后使用 a ,这样 x 的值就是 a 自增后的值11。
printf("x = %d\n", x);
system("pause");
return 0;
}
后置 ++ :先使用,然后进行自增。
如:
#include<stdio.h>
int main()
{
int a = 10;
int y = a++;
// 后置++:先使用 a ,然后对 a 进行自增,这样 y 的值就是 a 的初始值。之后 a++ 变为 11
printf("y = %d\n", y);
system("pause");
return 0;
}
前置、后置 - - :
前置 - - :先进行自减,然后使用;
如:
#include<stdio.h>
int main()
{
int a = 5;
int x = --a;
// 前置--:先对 a 进行自减,然后使用 a ,这样 x 的值就是 a 自减后的值4。
printf("x = %d\n", x);
system("pause");
return 0;
}
后置 - - :先使用,然后进行自减。
如:
#include<stdio.h>
int main()
{
int a = 5;
int y = a--;
// 后置--:先使用 a ,然后对 a 进行自减,这样 x 的值就是 a 的初值 5 。自减后的值4。
printf("y = %d\n", y);
system("pause");
return 0;
}
间接访问操作符( * ):
间接访问操作符也叫(解引用操作符)。如:*Pa 指针前加 * ,表示直接对指针进行一次访问。
对一个数的二进制按位取反( ~ ):
#include<stdio.h>
int main()
{
int a = 5;
printf("%d\n", ~a);
system("pause");
return 0;
}
强制类型转换:(类型)
#include<stdio.h>
int main()
{
int a = 6; // 定义 a 位整型
a = (int)3.14; // 强制类型转换,把浮点数(3.14)转换为整型
printf("a = %d\n", a);
system("pause");
return 0;
}
- 关系操作符
常见的关系操作符:
大于 ( > )、 大于等于( >= )、 小于( < )、 小于等于( <= )、 等于( == )、 不等于( != )
注意1: 等于( == ) 与 赋值( = ) 是不一样的,千万别搞混!
注意2: 字符串比较不能用“ == ”、“ > ”、“ < ”之类的关系操作符!可以使用 strcmp 这个函数进行字符串比较。它是一个库函数,使用时需要引用 stdlib.h 这个头文件。