学习C语言(10)

操作符详解

1.操作符的分类

2.二进制和进制转化

八进制表示:开头加0

十六进制表示:开头加0x

3.原码,反码,补码

整数的2进制表示方法有三种,即原码、反码和补码

有符号整数的三种表示⽅法均有符号位和数值位两部分,2进制序列中,最⾼位的1位是被当做符号位,剩余的都是数值位。符号位都是用0表示“正”,⽤1表示“负”,无符号整数全为数值位

补码取反加一得到原码

对于整型来说,数据以补码的形式存放在内存中

(在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时加法和减法也可以统一处理(CPU只有加法器),此外,补码和源码相互转换,其运算过程是相同的,不需要额外的硬件电路)

4.移位操作符 

移位操作符的操作数只能是正整数

(1)左移操作符<<

规则:左边抛弃,右边补零

(2)右移操作符>>

右移运算分两种:

逻辑右移(右边抛弃,左边补零)

算数右移(左边用原来的符号位填充,右边抛弃)

采用哪种右移取决于编译器,但是大部分编译器采用算数右移

5.位操作符

位操作符有:(补码)

&(按位与):有0则为0,没0才为1       

|(按位或):有1则为1,没1才为0            

^(按位异或 ):相同为0,相异为1     

~(按位取反):取反

这些操作符的操作数必须是整数

6.举例

(1)不能创建临时变量(第三个变量),实现两个整数的交换

抓住规律:任何一个数异或0就是它本身,异或它本身就是0

(2)求一个整数储存在内存中的二进制中1的个数

 

以上这种写法只能用于正整数

优化后可以用于正整数和负整数,但要循环32次,效率不高

 以上代码效率更高:

·在n=n&(n-1)中,当n末位是1时,-1后为0,结果末位必是0,则必少一个1;当n末位是0时,n-1打乱了末位前的分布,必出现错位,有错位必出0,则必少一个1;总体结果是靠右的1依次消失

·想得到某个二进制序列的最后一位,就给它按位与个1

(3)二进制位置0或置1

将13的二进制序列的第五位修改为1,然后再改为0

6.逗号表达式

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

7.下标访问[]   函数调用() 

(1)下标访问操作符[ ] 的操作数是一个数组名和一个索引值(下标)

(2)函数调用操作符( ) 接受一个或者多个操作数,第一个操作数是函数名,剩余的操作数就是传递给函数的参数 

8.结构成员访问操作符

 (1)结构体是自定义的数据类型,结构是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量,如:标量,数组,指针,甚至是其他结构体

(2)

结构的声明

结构体变量的定义

   或   

 结构体变量的初始化

指定顺序初始化 

结构体嵌套初始化

 

(3)结构体成员的直接访问用 .操作符,.操作符接受两个操作数 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值