C语言中操作符总结(中)

  1. 单目操作符
    单目操作符只用一个操作数。

    常见的单目操作符:
    逻辑反操作: !
    负值: -
    正值: +
    取地址: &
    操作数的类型长度(以字节为单位): 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. 关系操作符
    常见的关系操作符:
    大于 ( > )、 大于等于( >= )、 小于( < )、 小于等于( <= )、 等于( == )、 不等于( != )
    注意1: 等于( == ) 与 赋值( = ) 是不一样的,千万别搞混!
    注意2: 字符串比较不能用“ == ”、“ > ”、“ < ”之类的关系操作符!可以使用 strcmp 这个函数进行字符串比较。它是一个库函数,使用时需要引用 stdlib.h 这个头文件。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值