C语言之运算符的详解

简介: C语言之运算符的详解

1.3运算符

1.3.1运算符

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

1.3.2运算符的分类

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

例: a+b

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

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

--自减运算符 给变量值-1

int a=10;

a++;


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

()?():()

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<b)

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

2、|| 逻辑或

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

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

3、! 逻辑非

if(!(a>b)) {

}

1.3.5 位运算符

十进制转二进制:

方法 除 2 求余法

例: 123 十进制 转二进制

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

正数的原码=反码=补码

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

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

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

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

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

如单字节的 5 的补码为:0000 0101;-5 的补码为 1111 1011。

在计算机中,正数是直接用原码表示的,如单字节 5,在计算机中就表示为:0000 0101。 负数用补码表示,如单字节-5,在计算机中表示为 1111 1011。

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

1、&按位 与

任何值与 0 得 0,与 1 保持不变

使某位清 0

0101 1011&

1011 0100=

0001 000

2、| 按位 或

任何值或 1 得 1,或 0 保持不变

0101 0011 |

1011 0100 =

1111 0111

3、~ 按位取反

1 变 0,0 变 1

0101 1101~1010 0010

4、^ 按位异或

相异得 1,相同得 0

1001 1100 ^

0101 1010 =

1100 0110

5、位移

>>右移

<< 左移

注意右移分:逻辑右移、算数右移

(1)、右移

逻辑右移 高位补 0,低位溢出

算数右移 高位补符号位,低位溢出 (有符号数)

A)、逻辑右移

低位溢出、高位补 0 0101 1010 >>3

0000 1011

B)、算数右移:

对有符号数来说 低位溢出、高位补符号位。

1010 1101 >> 3

1111 010 1

总结 右移:

1、逻辑右移 高位补 0,低位溢出 注:无论是有符号数还是无符号数都是高位补 0,低位溢出 .

2、算数右移 高位补符号位,低位溢出 (有符号数) 注:对无符号数来说,高位补 0,低位溢出 对有符号数来说,高位补符号位,低位溢出.

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

5<<1

0000 0101

0000 1010

1.3.6 条件运算符

()?():()

A?B:C;

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

例 14: #include<stdio.h>  
int main(int argc, char *argv[]) { 
int a; 
a=(3<5)?(8):(9); 
printf("a=%d\n",a); 
return 0; } 

1.3.7 逗号运算符

(),()

例 15: #include<stdio.h>  
int main(int argc, char *argv[]) { 
int num; 
num=(5,6); 
printf("%d\n",num); 
return 0; }          注意逗号运算符的结果是,后边表达式的结果

1.3.8 自增自减运算符

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; }

相关文章
|
4天前
|
C语言
c语言运算符
C的运算符有以下几种: 算术运算符:+、-、*、/、% 结合方向自左向右 关系运算符:>、<、==、>=、<=、!= 逻辑运算符:!、&&、|| 位运算符<<、>>、~、|、^、& 赋值运算符:=及符号扩展赋值运算符(+=、-=、*=、/=) 条件运算符:? : 逗号运算符:, 指针运算符:*、& 求字节运算符:sizeof 强制类型转换运算符:((类型)) 分量运算符:.、-> 下标运算符:[]
11 4
|
3月前
|
存储 C语言
C语言数据类型、变量和运算符以及printf相关问题
C语言数据类型、变量和运算符以及printf相关问题
|
2月前
|
C语言
C语言判断和运算符联系
在 C 语言中,判断与运算符紧密相关,主要体现在条件表达式的使用上。
192 87
|
2月前
|
安全 C语言
C语言运算符的使用注意点
在C语言中,正确使用运算符能提升代码的可读性和效率。本文介绍了八大注意事项:运算符优先级和结合性影响运算顺序;自增/自减运算符分前缀和后缀形式;逻辑运算符有短路特性;位运算符直接操作二进制位需谨慎;条件运算符简洁但避免复杂嵌套;类型转换避免意外结果;使用括号明确运算顺序。掌握这些要点有助于编写更安全高效的代码。
183 72
|
1月前
|
存储 Java C语言
【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”
【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”
39 3
|
1月前
|
C语言
C语言条件运算符详解
C语言条件运算符,也称为三元运算符,是一种简化if-else语句的表达式,形式为:条件?表达式1:表达式2。当条件为真时,计算并返回表达式1的值;否则计算并返回表达式2的值。它可用于快速实现简单的条件分支逻辑。
|
2月前
|
安全 C语言
在C语言中,正确使用运算符能提升代码的可读性和效率
在C语言中,运算符的使用需要注意优先级、结合性、自增自减的形式、逻辑运算的短路特性、位运算的类型、条件运算的可读性、类型转换以及使用括号来明确运算顺序。掌握这些注意事项可以帮助编写出更安全和高效的代码。
47 4
|
2月前
|
程序员 C语言
【C语言基础考研向】06运算符与表达式
本文介绍了C语言中的运算符分类、算术运算符及表达式、关系运算符与表达式以及运算符优先级等内容。首先概述了13种运算符类型,接着详细说明了算术运算符的优先级与使用规则,以及关系运算符和表达式的真假值表示,并给出了C语言运算符优先级表。最后附有课后习题帮助巩固理解。
104 10
|
6月前
|
C语言
C语言中的条件运算符和条件表达式详解
C语言中的条件运算符和条件表达式详解
571 0
|
2月前
|
存储 编译器 C语言
【C语言基础考研向】07逻辑运算符与赋值运算符
本文介绍了C语言中的逻辑运算符与逻辑表达式、赋值运算符以及求字节运算符`sizeof`。逻辑运算符包括`!`(逻辑非)、`&&`(逻辑与)和`||`(逻辑或),其优先级规则与数学运算符类似。通过示例展示了如何用这些运算符判断闰年及逻辑非的运算方向。此外,文章还解释了左值与右值的概念及其在赋值运算中的应用,并介绍了复合赋值运算符的使用方法,如加后赋值`+=`和乘后赋值`*=`。最后,通过`sizeof`运算符示例展示了如何获取变量的字节大小。