c语言学习笔记:部分操作符学习

声明:此文章为作者自己学习c语言的笔记,给予记录,难免有谬误或纰漏,希望可以得到批评指             正^_^ 

           文章中所有代码运行于DevC++ 6.3

  1. 算数操作符
  2. 移位操作符
  3. 位操作符
  4. 赋值操作符
  5. 单目操作符

#算数操作符(一些要注意的点)

1.整型的除法 1/2-->0
2.浮点型的除法 1.0/2-->0.5
                       1/2.0-->0.5
                       1.0.2.0-->0.5
3.取模操作符%(两端必须是整数)

#移位操作符

注意:移位操作符移动的是二进制位,分为:

          >>右移操作符

          <<左移操作符

!!!这两个操作符只针对整数!!!

(这里略过关于整数的原码、反码和补码相关的介绍)

需要知道:整数在内存中存储的是补码

##左移操作符(左边抛弃,右边补零)                              

##右移操作符

###逻辑移位(左边用0填充,右边丢弃)

###算数移位(左边用原该值的符号位填充,右边丢弃) 

采用上述两个移位方式取决于编译器(只需要用负数测试一下就可以了)   

!注意:移位操作符的位数不能是负数,这个是未定义的     

#位操作符 

##   & - 按(2进制)位与

##   | - 按(2进制)位或

##    ^ - 按(2进制)位异或

我们不禁要发问:位操作符有什么用呢?(示例只是给出用法的举例,而不是普遍做法)

这里给一个题目:不创建临时变量,实现两个数的交换

由图中所说,这种方法在面对较大数字的时候存在溢出的问题

因此我们可以考虑使用位操作符(只限制于整数)

原理如下:

3^3
011
011
000--->两个相同的数字^的结果是0

0^5
000
101
101--->0异或一个数字的结果还是这个数字本身

因此有:

3^3^5 = 5

而:
3^5^3 = 5

因此我们可以得出结论:异或操作符支持交换律

但是在一般的开发过程中还是运用创建临时变量的方法,快,可读性高,不止限制于整数

下面再给一个题目进行思考:编写一个代码,求一个整数存储在内存中的二进制的1的个数

                                               也就是:求补码的二进制中1的个数

下面给出思路:

如此一来统计即可

#赋值操作符

!注意区分赋值和初始化

##连续赋值(不建议这样写)

##复合赋值符

a = a>>1;

等价于:a >>= 1;

#单目操作符(只有一个操作数)

#   !-   逻辑反操作

!注意:c语言中,0为假,非0为真

##   +,-   (正负号,单目)

##  & - 取地址符

##  sizeof

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

这里我们思考,如何将一个数的二进制序列的某一位0改为1

##  前置后置--,++(注意先后顺序即可)

!注意,再for循环中++,--前置后置没有什么区别

##  *  -  间接访问操作符(解引用操作符)

还是和指针相关

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值