15.【C语言】初识操作符 下

目录

05单目操作符

~:按(二进制)位取反(补码)(NOT运算)

前置++

后置++

06关系操作符(比较大小关系)

07逻辑操作符

&& 逻辑与(a与b同时)

||逻辑或(a或b)

07.5 逻辑操作符的特点

08条件操作符(三目操作符) 

09逗号表达式 

例1

例2

10.其他操作符

[ ](下标引用操作符)

( )

1.函数调用

2.强制类型转换


承接14.【C语言】初识操作符 上文章

05单目操作符

补上一篇的位操作符

~:按(二进制)位取反(补码)(NOT运算)

有关带符号整数的二进制的三种表示:原码,反码,补码

int 32个bit

表示-1

原码

10000000000000000000000000000001 (最左边是符号位,0正1负,剩余是数值位,数值为表示真值-1的绝对值) 

反码:

负数:在原码基础上数值位0改1,1改0(即按位取反),符号位不变

正数:原码即反码

-1:01111111111111111111111111111110

补码:

负数:反码末尾+1

正数:反码即补码

-1:01111111111111111111111111111111

所以正数:原码=反码=补码

表示0

原码

00000000000000000000000000000000或10000000000000000000000000000000

(+0和-0均可)

#include <stdio.h>
int main()
{
	int a = 0;
	printf("%d", ~a);
	return 0;
}

结果:-1

由于整数在内存中存储的是补码,整数的真实值是由原码得到的

printf打印的是二进制补码转成原码的十进制数字

0:原码00000000000000000000000000000000

     反码11111111111111111111111111111111

     补码11111111111111111111111111111111 (不变,如果末尾+1会溢出)

++(自增)和--(自减):

使用分为前置和后置

前置 ++a --a

后置 a++ a--

前置++

先++,后使用

int a=3;

int b=2;

b=++a;

先++(就是+1):a的值由3变4,后使用:4赋值给b 

同理b=--a;(--就是-1)

#include <stdio.h>
int main()
{
	int a = 3;
    int b = 2;
    b = --a;
	printf("%d\n", a);
	printf("%d\n", b);
	return 0;
}

后置++

先使用,后++

int a=3;

int b=2;

b=a++;

先使用:a的值未变时先赋值给b

后++:a的值+1

同理b=a--

(类型):当类型不匹配时,可强制类型转换
int a=(int)1.21;

把1.21强制转换为整型

(& *在第19篇)

06关系操作符(比较大小关系)

>大于

>=大于等于

<小于

<=小于等于

!=不等于

==等于(容易写成=)

07逻辑操作符

&& 逻辑与(a与b同时)

与:a与b任意一个为假则为假,a与b全真则为真

#include <stdio.h>
int main()
{
	int a = 3;//a非0,见第14篇
    int b = 2;//b非0
	int c = a && b;//逻辑与判断:a与b均非0,则a与b为真
	printf("%d\n", c);//输出1
	return 0;
}

非常经典的闰年判断:

普通闰年:公历年份是 44 的倍数,且不是 100100 的倍数的,为闰年(如 20042004 年、20202020 年等就是闰年)。

世纪闰年:公历年份是整百数的,必须是 400400 的倍数才是闰年(如 19001900 年不是闰年,20002000 年是闰年)。

if ((year%4==0 && year%100!=0) || (year%400==0))

||逻辑或(a或b)

或:a与b任意一个真则真,两个都为假则假

#include <stdio.h>
int main()
{
	int a = 0;//a假
    int b = 0;//b假
	int c = a || b;//逻辑与判断:a或b为假
	printf("%d\n", c);//输出0
	return 0;
}

07.5 逻辑操作符的特点

总是先对左侧的表达式求值,再对右边的表达式求值。如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”

换而言之,逻辑运算符总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证
的,如果左边的表达式就能确定整个表达式的结果,就不再对右边的表达式求值

if (a>=3 && a<=5)
 printf("ABC");

当a=2时,不满足 a>=3,由&&的运算规则,a<=5的判断不会执行,不打印ABC

if (a>=3 || a<=5)
  printf("ABC");

当a=3时,满足a>=3, 由||的运算规则,a<=5的判断不会执行,打印ABC

像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进行计算的运算称为短路求值

08条件操作符(三目操作符) 

格式:表达式1?表达式2:表达式3即为exp1?exp2:exp3

规则:exp1成立,计算exp2,得出结果;exp1不成立,计算exp3,得出结果;(其实类似if语句)

例:输入两数输出最大值

#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	scanf("%d %d", &a, &b);
	c= a > b ? a : b;
	printf("%d\n", c);
	return 0;
}

如果调用数组则简洁:

#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int a[3] = { 0 };
	scanf("%d %d", &a[0], &a[1]);
	a[2] = a[0] > a[1] ? a[0] : a[1];
	printf("%d\n", a[2]);
	return 0;
}

例:

    if (a>5)
      b=3;
	else 
	 b=-3; 

等价为

b=(a>5):3:-3;

09逗号表达式 

定义:逗号隔开的一串表达式

exp1,exp2,exp3,……,expn

程序从左向右依次执行exp

整个exp的结果是最后一个exp的结果

例1

int a=0;

int b=0;

int d=(a=a+1,c=c+2,c=c-a);

d为1

例2

简化代码

a = get_val();
count_val(a);
while (a > 0)
{
//业务处理
//...
a = get_val();
count_val(a);
}

可改为

while (a = get_val(), count_val(a), a>0)
{
//业务处理
}

10.其他操作符

[ ](下标引用操作符)

可用于定义数组

介绍()

( )

1.函数调用

printf();

格式:函数名(内容);

(.和->在第20篇 http://t.csdnimg.cn/px53w)

2.强制类型转换

格式

(类型)
int a = (int)3.14;//a的输出结果是3

float b=4/(double)5;//b的输出结果是0.800000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zhangcoder

赠人玫瑰手有余香,感谢支持~

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

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

打赏作者

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

抵扣说明:

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

余额充值