C语言期末复习不挂科(快速入门)(和bug郭一起学C系列1)(3)

简介: C语言期末复习不挂科(快速入门)(和bug郭一起学C系列1)(3)

操作符

指令系统的每一条指令都有一个操作符,它表示该指令应进行什么性质的操作。


可能你还是不太懂,没事看我介绍完,你就明白了。

比如数学中的加减乘除就是操作符!


算数操作符

简单地说,进行数学的算数运算就是算数运算符


image.png

int a=5,b=2;
//错误运算
   int sum1=a/b;          //2 两数都是整型 
   int sum2=a/(float)b;   //2 未存放在浮点型中
   float sum3=a/b;        //2  两数都是整型 
//正确运算
   float sum=a/(float)b;  // 2.5

image.png


移位操作符

右移运算符 >>

左移运算符 <<

这里的位指的是2进制位

联系我们的十进制移位


小数点不动,数据移动

12.3 右移一位 >> 1.23 结果缩小10倍

12.3 左移一位 << 123. 结果扩大10倍


所以2进制的移位扩大2的倍数

因为计算机存储的位数是固定的,

数据是以补码的形式存储的。

我们来了解一下原码,反码,补码的概念。


符号位:正数的符号位用0表示 负数为1

原码:带有符号位的二进制位

反码:除符号位外原码的2进制位取反

补码:反码加1


为啥要引入补码这个概念呢?

因为计算机只能进行加法和移位操作


原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

12     二进制表示  1100
      储存在8位机器中 且有一位符号位
      符号位:正数的符号位用0表示  负数为1
              原码 反码,补码    0,0001100  
     -12  
     原码      1,0001100    
     反码      1,1110011   
     补码      1,1110100

所以移位移动的是补码的二进制位

因为机器字长的原因

移位后数据减少移位需要添加移位

正数

左移右边添0

右移左边添0

负数

左移右边添0

右移左边添1

image.png


位操作符

二进制位运算

image.png

赋值操作符

=    +=    -=   *=   /=   %=   ......

赋值“=”可以和很多运算符组合,就不一一列举


 

1   a=a+3;   b=b*3;
  简化 2    a+=3;   b*=3;
            1和2等价

这就是赋值操作符的组合,C语言代码经常这样书写。


“=”在不同的位置含义不同,列如


int a=12;   //初始化非赋值
        a=10;   //赋值操作

单目操作符

单目就是只有一个操作数

image.png


image.png

|      负值
|      正值

& | 取地址

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

~ | 对一个数的二进制按位取反

– | 前置、后置–

++ | 前置、后置++


|  间接访问操作符(解引用操作符)

(类型) |强制类型转换

我们来介绍一些我们还没见过的操作符

!逻辑取反

image.png

计算机中以0为假,非0为真,所以非0取反后为0;0取反后为非0;

而vs下规定!0=1

! 通常用于判断语句,下次学习


&取地址操作符       * 解引用操作符

1

我们要先了解一下指针这个概念


指针就是地址,地址就是指针。


联系生活中的,图书馆借书,我们要找到我们要想要借书的位置,那个书架的位置就是它的书的地址,然后我们就可以根据这个地址找到这本书,就好比我们收快递的地址。

而计算机开辟空间存储数据,那块空间就是这个变量的的地址,通常用一串二进制代码表示。


 image.png

可能你还很懵,不要紧,后期还会学习


~按位取反操作符

同位操作符一样,将一个数的二进制位取反


++自加     -- 自减

我们通常写循环语句的时候要将 i 递增加减


i=i+1;     等价    i++;   ++i;
i=i-1;            i--;   --i;

是否发现上面 有前置加加和后置加加

++i 和 i++有什么区别吗?

image.png

同样是自加,为啥前置和后置的计算结果不一样呢?


前置加加,先自加后使用

后置加加,先使用后加加

自减也是如此


所以++i 先计算i=i+1后再打印

而 j++ 先打印 j 再计算j=j+1;


 

(类型) 强制类型转换

 

int a=5,b=2;
     float sum=a/(float)b; //将int类型b强制转换成float类型

关系操作符

>
>=
<
<=
!=         用于测试“不相等”
==        用于测试“相等”

上面的操作符都用于判断俩数的大小关系 属于双目操作符


int a=10,b=12;
  if(a>b)
  {
  printf("a>b\n");
  }
  if(a==b)   //测试判断a与b是否等于
  {
   printf("a==b\n");
  }
  if(a!=b)   //测试“不相等”
  {
   printf("a!=b\n");
  }

注意:

测试等于关系操作符是“ ==” 而不是“=”

“=”是赋值操作符


逻辑操作符

&&     逻辑与   (数学中的并且)
||     逻辑或    (数学中的或者)

&& 要左右两个表达时同为真,就是两个表达式结果都不为0


|| 一个表达式为真就为真 ,两个表达式结果有一个为非0就为真


逻辑运算符计算规则

||表达式依次计算,直到有一个表达式结果为非0就停止计算。

&&表达式依次计算,直到有一个表达式结果为0就停止计算

结果为真 整个逻辑表达式值为1;结果为假,整个逻辑表达式值为0。


image.png

你是否被这种题目给烦恼到,这么数和操作符;

为啥x=6 y=7 z=9呢?


逻辑运算值只有1和0,真就是1,假就是0,‖只要运算到有一个表达式的值非0就为真,就不会算下去了,&&一直算到0才不会进行计算了,++x前置加加先加加后使用,x++后置先使用后加加。


你试试看,是不是,就那样。



条件操作符

exp1 ? exp2 : exp3


// 求最大值
  int  max=0,a=3,b=5;
  if(a>b)
  {
   max=a;
  }
  else
  {
  max=b;
  }
 // 等价于
  max=(a>b)?a:b

是不是发现条件表达式超简洁!

exp1 ? exp2 : exp3

如果exp1为真,执行exp2,否者执行exp3;


逗号操作符

exp1, exp2, exp3, …expN


表达式从左到右依次计算,最后一个表达式即为运算结果。

image.png


目录
相关文章
|
2月前
|
存储 编译器 C语言
C语言难?深度剖析第一段C语言代码—带你快速入门C语言
C语言难?深度剖析第一段C语言代码—带你快速入门C语言
42 0
|
2月前
|
机器学习/深度学习 人工智能 C语言
【c语言基础题】— —第五版,可当作日常练习和期末复习,有奇效哟!
【c语言基础题】— —第五版,可当作日常练习和期末复习,有奇效哟!
43 1
|
2月前
|
算法 Java C语言
【c语言基础题】— —第一版,可当作日常练习和期末复习,有奇效哟!
【c语言基础题】— —第一版,可当作日常练习和期末复习,有奇效哟!
78 0
|
2月前
|
程序员 C语言 CDN
【c语言基础题】— —第三版,可当作日常练习和期末复习,有奇效哟!
【c语言基础题】— —第三版,可当作日常练习和期末复习,有奇效哟!
80 0
|
1月前
|
存储 编译器 C语言
【C语言期末不挂科——指针进阶篇】【上】
【C语言期末不挂科——指针进阶篇】【上】
|
2月前
|
人工智能 网络协议 BI
【c语言基础题】— —第七版,可当作日常练习和期末复习,有奇效哟!
【c语言基础题】— —第七版,可当作日常练习和期末复习,有奇效哟!
21 0
|
2月前
|
人工智能 网络协议 BI
【c语言基础题】— —第六版,可当作日常练习和期末复习,有奇效哟!
【c语言基础题】— —第六版,可当作日常练习和期末复习,有奇效哟!
26 0
|
2月前
|
C语言 wax
【c语言基础题】— —第四版,可当作日常练习和期末复习,有奇效哟!
【c语言基础题】— —第四版,可当作日常练习和期末复习,有奇效哟!
90 0
|
2月前
|
机器学习/深度学习 C语言
【c语言基础题】— —第二版,可当作日常练习和期末复习,有奇效哟!
【c语言基础题】— —第二版,可当作日常练习和期末复习,有奇效哟!
81 0
|
3月前
|
C语言
C语言部分期末答案(来自PTA)
C语言部分期末答案(来自PTA)