C语言运算符

1.3运算符

1.3.1运算符

用算术运算符将运算对象(也称操作数)连接起来的、符合C语法规则的式子,称为C算术表达式

运算对象包括常量、变量、函数等

例如: a*b/c-1.5 + 'a'
1.3.2运算符的分类:

1、双目运算符:即参加运算的操作数有两个

例: +
a+b

2、单目运算符:参加运算的操作数只有一个.

++自增运算符给变量值+1

-自减运算符

a++;

3、三目运算符:即参加运算的操作数有3个

0?0:0

1.3.3算数运算符
+-*/%
+=
-=
*=
/=
%=

10%3表达式的结果为 1|

复合运算符:

a+= 3

相当于a=a+3

a*=6+8相当于 a=a*(6+8)

1.3.4关系运算符
(>、<、==、>=、<=、!=)

!=为不等于

一般用于判断条件是否满足或者循环语句

1.3.5逻辑运算符
1、&&逻辑与

两个条件都为真,则结果为真

if((a>b) && (a<c))

if(b<a<c)//这种表达方式是错误的

2、II 逻辑或

两个条件至少有一个为真,则结果为真

if(a>b) II (a<c))

3、!逻辑非

if(!(a>b))

{

}

1.3.6位运算符

十进制转二进制:

方法除2求余法

例:

123十进制转二进制

正数在内存中以原码形式存放,负数在内存中以补码形式存放

正数的原码=反码=补码

原码:将一个整数,转换成二进制,就是其原码。

如单字节的5的原码为: 0000 0101; -5 的原码为1000 0101。

反码:正数的反码就是其原码;负数的反码是将原码中,除符号位以外,每一位取反。

如单字节的5的反码为: 0000 0101; -5 的反码为1111 1010。

补码:正数的补码就是其原码:负数的反码+1就是补码。

如单字节的5的补码为:

00000101; -5 的原码为1111 1011。

在计算机中,正数是直接用原码表示的,如单字节5,在计算机中就表示为: 0000 0101.

负数用补码表示,如单字节-5,在计算机中表示为1111 1011。

无论是正数还是负数,编译系统都是按照内存中存储的内容进行位运算。

总结 右移:
1、逻辑右移.
高位补0,低位溢出
注:无论是有符号数还是无符号数都是高位补0,低位溢出
2、算数右移
高位补符号位,低位溢出(有 符号数)
注:对无符号数来说,高位补0,低位溢出
对有符号数来说,高位补符号位,低位溢出

在一个编译系统中到底是逻辑右移动,还是算数右移,取决于编译器

判断右移是逻辑右移还是算数右移

#include < stdio.h>
int main(int argc, char *argv[])
{
printf("%d\n",-1>>3);
return 0;

如果结果还是-1证明是算数右移

(2) 左移<<高位溢出,低位补0

5 <<1
0000 0101
0000 1010
1.3.7条件运算符号

0?0:()

A?B:C;

如果?前边的表达式成立,整个表达式的值,是?和:之间的表达式的结果

否则是:之后的表达式的结果

例14:

#include < stdio.h>
int main(int argg, char *argv[])
{
int a;
a=(3<5)?(8);:(9);
printf("a=%d\n",a);
return 0;
}
1.3.8逗号预算符

(),()

例15:

#include < stdio.h>
int main(int argc, char *argv[])
{
int num; 
num=(5,6);
printf("%d\n",num);
return 0;
}

注意逗号运算符的结果是,后边表达式的结果

1.3.9自增自减运算符

i++

i--

运算符在变量的后面,在当前表达式中先用i的值,下条语句的时候i的值改变

例16:

#include <stdio.h>
int main()
{
int i=3;
int num;
num=i+ +;
printf("num= %d,i= %d\n",num,i);//num=3 ,i=4
return 0;
}

++i先加,后用

例17:

#include < stdio.h>
int main()
{
int i=3;
int num;
num=++i;
printf("num= %d,i=%d\n",num,i);//num=4,i=4
return 0;
}

例18 :

#include <stdio.h>
int main(int argc, char *argv[])
{
int i=3;
int num;
num= (i++)+(i++)+(i++);
printf("nufm= %d\n",num);
return 0; 
}

例19 :

#include < stdio.h>
int main(int argc, char *argv[)
{
int i=3;
int num;
num= (+ +i)+(++i)+(+ +i);
printf("num=%d\n" ,num);
return 0;
}
1.3.10运算符优先级及结合性

运算符优先级

在表达式中按照优先级先后进行运算,优先级高的先于优先级低的先运算

优先级--样的按结合性来运算

int a;
a=2+5+3*4-6

运算符结合性

左结合性:从左向右运算

int a;
a=2+3+9+10;

右结合性:从右向左运算

int a,b,c,d;
a=b=c=d=100;

注:建议当表达式比较复杂的时候,用()括起来,括号的优先级最高,优先算括号里的。

这样也防止写错表达式。

int a;
a= ( 2+3 ) *6+(9*3)+10;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值