从零开始学习C语言日记——DAY29操作符详解

本文详细介绍了编程中的操作符,包括位操作符、赋值操作符、单目操作符、sizeof、按位取反、自增自减、关系操作符、逻辑操作符以及三目操作符的使用。通过实例解析了如何修改二进制位、数组传参、关系比较等,并强调了操作符使用的注意事项,帮助读者深入理解各种操作符的功能和用法。
摘要由CSDN通过智能技术生成

一、操作符详解

例题如果我要将a的5为改为1那么改如何编程

 

A=13

13=00000000 00000000 00000000 00001101

或上(按位与=有1出1全0出0

1<<4=00000000 00000000 00000000 0001 0000

当有一出一时则会让第五位变为1其他的按照13进行。

又因为是2进制1 2 4 8 16所以最后打印的数为11101=29

二、赋值操作符

赋值操作符是一个很棒的操作符,他可以让你得到一个你之前不满意的值。也就是你可以自己给自己定一个值。

例如:=、+=、-=、*=、/=、>>=、<<=

A=x=y=1//连续赋值都是y+1的值

复合操作符+=、-=、*=、/=、>>=、<<=

  • 单目操作符

!——逻辑取反

-——负值

+——正值

&——取地址

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

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

--——前置、后置--

++——前置、后置++

*——间接访问操作符

(类型)——强制类型转换

(一)!逻辑取反

 

当a=5时为真打印hehe、当a等于!A(取反)为假时打印haha。

单目操作符只有一个操作数

(二)、Sizeof

 

 

当计算了sizeof时是s说了算,sizeof计算出了s的大小之后这行程序就已经执行完了

(三)、按位取反~

在内存里存的是补码,所以取反是按补码进行取反。

 

例题1里把13的第五位改为了1,那么现在该怎么改回来呢。

 

利用取反把原来是

00000000 00000000 00000000 00010000先将1向左位移4位

11111111 11111111 11111111 11101111的值取反位

00000000 00000000 00000000 00001101在与上这个数(有0出0,全1出1)

最后即可改为0

(四)++、--

 

后置++要注意当运算完之后就会运行++

 

--也是同样的道理,

A=10

前置=9,10

后置=9,9

  • 、取地址、间接访问操作符

 

  • 、强制类型转换

 

当输入与类型不符的值时,会报出错误。可以使用强制类型转换(int)

(七)、sizeof和数组传参

 

Printf打印出sizeof计算的数组大小:arr是40(int为4个字节,4*10=40)ch为10(char为1个字节)

然后用test1(arr)传到test1函数,test1里的打印函数打印出多少呢?答案是8

数组传参本质上传的是首元素的地址,他的数组元素都是整型那第一个也当然是整型。

首元素地址放到函数里那应该放在指针变量里也就是说void test1(int arr[])的(int arr[])

应该是(int* arr[])所以打印出来的是4和8

Int为什么是4和8?那char为什么也是4和8?

不要看ch是个char类型是数组,他传过去的依然是首元素地址。即使你传的是个char类型的地址,那也应该是个指针(char* ch),指针变量是用来存放地址的,那ch也是用来存放地址的,大小也应该是个指针变量的大小,也是4或者8个字节。

指针大小不论类型,不管什么类型的指针变量都是用来存放地址的,地址总是32个进制序列或者64个2进制序列。所以地址的大小是固定的,不管什么类型都是这么大

32位是4

64位是8

(八)、关系操作符

>

>=

<

<=

!=

==

关系操作符就是用来比较大小的,比较简单,但是我们要注意一些运算符使用时候的陷阱。

注意:在编程过程中==和=不小心写错,导致的错误。

==是判断     =是赋值

If(什么>=什么)

  • 逻辑操作符

&&(并且)

||(或者)

if(什么&&什么)

当两个都为真的时候才会进去

其中一个不为真就直接出去

If(什么||什么)

当两个中有一个满足就会进来

当有一个满足条件了就直接出去

A=0   b=3 c=3 d=4

例题

 

为什么会是1234?

因为i的a++是先计算再加的,再然后是因为并且有了假之后后面的值就都不要算了。

(十)三目操作符

因为有三个操作数

Exp1?Exp2:exp3

A=1

B=(  a > 5 ?   1   :   -1   );

解析:a大于5吗?如果大于则b是1如果小于则是-1.

其实差不多是IF else语句

(十一)、逗号表达式

逗号表达式,就是用逗号隔开的多个表达式。逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。

 

例2:if(a = b + 1,c = a / 2 ,b > 0);

这个代码里决定进不去由d>0说得算,但是d可能会受前面表达式计算的影响。

例3:

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

1.[]下标引用操作符

操作数:一个数组名+一个索引值

访问数组元素时使用

 

2.()函数调用操作符

接收一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数

Int main()

{

Test1();

}

3.访问一个结构的成员

“.” 结构体成员名

->结构体指针,成员名

Struct book

定义一个结构体类型:书

 

结构体变量名.成员名

 

用结构体的指针找到成员

结构体指针->成员名

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值