一.初识C语言(4)

单目操作符

+:正值

-:负值

!:逻辑反操作

&:取地址

sizeof:求操作数的类型长度(以字节为单位)

~:按位取反(对一个数的二进制)

++:自增运算符

--:自减运算符

(类型):强制类型转换

-- -- -- -- -- -- -- -- -- --

逻辑反操作


#include <stdio.h>
int main()
{
int a = 0;
printf("%d\n",a);
printf("%d\n",!a);//逻辑反操作,0为假,非0为真
return 0;
}

运行结果:

0

1(其实只要非0就是真,但编译器运行后默认用1表示真)

若a=10,则!a=0

-- -- -- -- -- -- -- -- -- --

sizeof

sizeof(变量/类型)

计算的是变量/类型所占空间的大小,单位是字节


#include <stdio.h>
int main()
{
int a = 10;
printf("%d\n",sizeof(a));//括号里面放变量名
printf("%d\n",sizeof(int));//放类型名
printf("%d\n",sizeof a );//不写括号
//printf("%d\n",sizeof int );//上面三种写法都可以,唯独不能不写括号+类型名
return 0;
}

运行结果

4

4

4

-- -- -- -- -- --

sizeof(数组名)

sizeof(数组名)求的是整个数组的大小,单位是字节


#include <stdio.h>
int main()
{
int arr[10]={0};
//数组有十个元素,每个元素都是int类型
//10*sizeof(int)=10*4=40
printf("%d\n",sizeof(arr));
return 0;
}

运行结果:40

-- -- -- -- -- --

计算数组中的元素个数

#include <stdio.h>
int main()
{
int arr[10]={0};
int sz = 0;
sz=sizeof(arr)/sizeof(arr[0]);
//元素个数等于数组总大小/一个元素的大小
printf("%d\n",sz);
return 0;
}

运行结果:10

-- -- -- -- -- -- -- -- -- --

按位取反

猜一下下面代码运行的结果


#include <stdio.h>
int main()
{
int a = 0;
int b = ~a;//按位取反,按二进制位
printf("%d\n",b);
return 0;
}

运行结果:-1

是不是非常难以理解,解释前我们先简单了解一下符号位以及原码、反码、补码

-- -- -- -- -- --

符号位

int代表有符号的整型,unsigned int代表无符号整型。

  • 有符号的整型二进制位的最高位表示的是符号位,最高位为1表示负数,为0表示正数

  • 无符号的整型则是所有位都用来表示一个数

例:

a:101

若a无符号数,a是5

若a是有符号数,a是-1

-- -- -- -- -- --

原码、反码、补码

首先我们要知道,我们的整型数字在内存中存储的都是二进制的补码,但我们在使用、打印这个数的时候,使用的却是原码。

原码变成补码需要经过下面整些步骤:

原码:十进制的整数转换成一个二进制序列

原码—>反码:符号位不变,其他位按位取反,得到反码

反码—>补码:反码+1得到补码

-- -- -- -- -- --

回到题目


#include <stdio.h>
int main()
{
int a = 0;//4个字节,32个比特位
int b = ~a;//按位取反,按二进制位,0取反变成1,1取反变成0
//a:000000000000000000000000
//按位取反b:111111111111111111111111
//b是一个有符号的整型,二进制位的最高位表示的是符号位。是1,说明b是负数
//负数在内存中存储的时候,存储的是二进制位补码,打印时要用原码
//b补码:111111111111111111111111
//b反码:111111111111111111111110
//b原码:100000000000000000000001(从左往右,第一个1表示负数,最后一个1表示1)
printf("%d\n",b);//最终输出-1
return 0;
}

重点:只要是整数,内存中存储的都是二进制的补码。但是有符号数的正数和无符号数的原码、反码、补码相同

-- -- -- -- -- -- -- -- -- --

自增、自减运算符

++和--的使用方式是一样的,因此仅举例++

前置++

#include <stdio.h>
int main()
{
int a = 10;
int b = ++a;//前置++,先++,再使用
//++后a变成11,再赋给b,b也变成11
printf("a=%d  b=%d\n",a,b);
return 0;
}

运行结果:a=11 b=11

-- -- -- -- -- --

后置++

#include <stdio.h>
int main()
{
int a = 10;
int b = a++;//后置++,先使用,再++
//所以先给b赋值,b就等于10,a再++变成11
printf("a=%d  b=%d\n",a,b);
return 0;
}

运行结果:a=11 b=10

-- -- -- -- -- -- -- -- -- --

强制类型转换

#include <stdio.h>
int main()
{
int a = (int)3.14;//强制类型转换,double——>int
printf("%d\n",a);
return 0;
}

运行结果:3

-- -- -- -- -- -- -- -- -- -- -- -- -- -- --

关系操作符

<    <=    >    >=    !=(用于测试不相等)    ==(用于测试相等)

-- -- -- -- -- -- -- -- -- -- -- -- -- -- --

逻辑操作符

&&      ||

-- -- -- -- -- -- -- -- -- --

逻辑与:&&

有一个是假,结果为假,两个都是真才是真,可以用“并且”来理解


#include <stdio.h>
int main()
{
//真————非0
//假————0
int a = 3;
int b = 5;
int c = a&&b;//a,b两个都为真,c才能为真
printf("%d\n",c);
return 0;
}

运行结果:1

#include <stdio.h>
int main()
{
	int i = 0;
	int j = 10;
	if (i && j)
	{
		printf("i&&j是真");
	}
	else
	{
		printf("i&&j是假");
	}
	return 0;
}

运行结果:i&&j是假

(因为i是0,即判断为假,有一个假就是假,此时编译器都不会再去判断j是不是真了,所以i&&j的结果是0。在if语句里0也是假,条件为假,执行else,所以打印“i&&j是假”)

-- -- -- -- -- -- -- -- -- --

逻辑或:||

有一个为真,结果为真,两个都是假才是假,可以用“或者”来理解


#include <stdio.h>
int main()
{
//真————非0
//假————0
int a = 0;
int b = 5;
int c = a||b;//a是假,b是真
printf("%d\n",c);
return 0;
}

运行结果:1

可以自己试试写一段程序来验证if(i  ||  j)的结果

-- -- -- -- -- -- -- -- -- -- -- -- -- -- --

条件操作符

exp1 ? exp2 : exp3

其中exp是表达式的意思,因为有三个操作数,所以又叫做三目操作符

含义:如果表达式1为真,则执行表达式2,否则执行表达式3


#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
int max = 0;
max=(a>b?a:b);//如果a>b,则max为a,显然a<b,所以max等于b,也就是20
printf("%d\n",max);
return 0;
}

运行结果:20

-- -- -- -- -- -- -- -- -- -- -- -- -- -- --

逗号表达式

exp1,exp2,exp3...expN (用逗号隔开一串表达式)

逗号表达式的结果是最后一个表达式的结果

-- -- -- -- -- -- -- -- -- -- -- -- -- -- --

下标引用、函数调用和结构成员

[ ]      ( )      .      ->

-- -- -- -- -- -- -- -- -- --

下标引用操作符


int main()
{
int arr[10] = {0};
arr[4];//[]————下标引用操作符,这里访问第五个元素
return 0;
}

函数调用操作符


#include <stdio.h>
int Add(int x,int y)
{
return x+y;
}
int main()
{
int a = 10;
int b = 20;
int sum = Add(a,b);//()————这就是函数调用操作符
printf("%d\n", sum);//会输出30
return 0;
}

操作符到这里就讲完了,更加详细的介绍会在后面的内容中提到。感兴趣或者想提前链接的可以看看这个链接

C语言运算符

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世长老

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值