*** 作符上篇(c语言初阶-4)

 *** 作符上篇(c语言初阶-4),第1张

*** 作符上篇(c语言初阶-4)

目录

1.算数 *** 作

1.1  “ / ” *** 作符

 注意:

 1.2  “ % ” *** 作符

     注意:

 2.移位 *** 作符

2.1左移(<<)操作符

>) *** 作符"> 2.2右移(>>) *** 作符

 注意:

 3. 位运算

补充:权重

3.1 按位与运算符(&)

3.2 按位或运算符(|)

3.3 按位异或运算符(^) 

注意:

 实例运用:

1.交换两个整型变量(不创建临时变量)

 2.判断1的个数

 3.找两个整数中不同的位数 

4.赋值 *** 作符(=)

注意:

5.复合运算符

、<  、==  、<=  、>=  、!= )">6:关系 *** 作符(> 、<  、==  、<=  、>=  、!= )

7.逻辑 *** 作符

7.1逻辑与(&&) *** 作符

7.2逻辑或(  || ) *** 作符

注意:

2. 注意区分逻辑 *** 作符和按位 *** 作符

实例:

1. 逻辑与的短路运算

2.逻辑或的短路运算



1.算数 *** 作符

1.1  “ / ” *** 作符

        “ / ” *** 作符属于双目 *** 作符,用于求商  

         当两个 *** 作数均为整数且恰好可以除尽时,所得结果符合实际数学运算。

     当两个 *** 作符均为整数且余数不为0时,所得结果为0向取整(取更接近于0的整数,即不进行四舍不入,直接舍掉小数)后的结果。

        如(-5)/ 2 实际为(-2.5),零项取整发现(-2)更为接近0,结果为(-2),或直接舍掉小数位(0.5),取结果(-2)。

   

      当 *** 作数有负数时,结果不受影响,符合实际正负逻辑(当然还符合零项取整):

 注意:

1.分母不能为0

2.整数除法余数不为0:在除的同时,就已经去掉了小数点,即整数运算后结果为已经零向取整后的结果,然后该结果才以浮点型存储到变量中,小数位全为0。

 处理办法:将正数除法变为浮点数同整数的运算即可。

 1.2  “ % ” *** 作符

        “ % ” *** 作符属于双目 *** 作符,进行取余运算

     注意:

       “ % ” 只能用于整型 *** 作数,而不能进行浮点数的运算

 当其中一个 *** 作数为负数时:

最后运算结果同第一个 *** 作数的正负号相同。

 当 *** 作数均为负数时:结果同样取第一个 *** 作数的符号。

 2.移位 *** 作符

2.1左移(<<)操作符

        左移后,左边最高位抛弃,右边最低位补0。        

 2.2右移(>>) *** 作符

        右移分为两种,一种是逻辑右移,一种是算数右移

算术移位:左边用该值得符号位填充,右边丢弃

逻辑移位:左边用0填充,右边丢弃

         结果为-1,因此我们可以发现该编译器进行右移运算采用的是算术右移,左边补符号位(符号位看自身类型,若为无符号数,补0,;若为有符号数且为负数,补1),右边丢弃。

 注意:

   a:移位 *** 作数只能移位整型,左右 *** 作数均不可为浮点数。

 

      b:移位运算符不能移动负数位,这种行为是标准未定义的  

 3. 位运算符

“ 位 ”指的是二进制位。

补充:权重

      权重就是指所占的比重,如期末考试在总分上的占比。

      如5——0000 0101 这8个bit位中,从右到左权重依次减小,即低位的权重小,高位的权重大。

      如低位的1代表 1*(2^0) =1;而高位的1代表的则是 1*(2^2)=4.

3.1 按位与运算符(&)

        “ & ”:相对应(权重相同)的二进制位若均为1,则结果为1,其它情况,结果均为0.

3.2 按位或运算符(|)

         “ | ”:相对应(权重相同)的二进制位若至少有一个为1,则结果为1,若均为0,则结果为0。

3.3 按位异或运算符(^) 

        " ^ ":相对应(权重相同)的二进制位相同则结果为0,相异则结果为1.

如下:

注意:

   a^a = 0;

   0^a = a;     

如下:

 

 实例运用: 1.交换两个整型变量(不创建临时变量)

 2.判断1的个数

         但很显然,上述方法对于有符号负数是不成立的,因为有符号负数右移采用的是算术移位,右边丢弃,左边补符号位,也就是1,如此while循环就会陷入死循环。

优化如下:

 3.找两个整数中不同的位数 

4.赋值 *** 作符(=)

赋值 *** 作符相信大家都有所了解,不过多赘述。

注意:

1.赋值 *** 作符可以进行连等(链式赋值)

 2.注意初始化和赋值的区别

       初始化只能进行一次,会开辟空间。赋值能进行多次,只是修改原有空间里的值。

3.区分赋值(=)和等于(==)

5.复合运算符

(+= 、-=  、*=  、/=  、&=  、|=  、%= 、 >>= 、<<=  、^= ... )

6:关系 *** 作符(> 、<  、==  、<=  、>=  、!= )

a:" != " 为不相等的判断 

b:注意“==”与“=”区别

7.逻辑 *** 作符

         对逻辑结果进行 *** 作的 *** 作符。

7.1逻辑与(&&) *** 作符

        “ && ”,若两个 *** 作数结果均为真,则结果为真。

7.2逻辑或(  || ) *** 作符

        “||”,若两个 *** 作数结果有一个为真,则结果为真;均为假,则结果为假。

注意:

1. *** 作符的短路运算

     “&&”两个从 *** 作数从左往右进行判断,若左边表达式结果为假,则不再进行右边表达式的判断,直接的出结果为假。

    “||”中若左边结果为真,则不再执行右边表达式,得出总结果为真。

 

2. 注意区分逻辑 *** 作符和按位 *** 作符

        按位 *** 作符是对二进制位的 *** 作,而逻辑 *** 作符是对逻辑结果的 *** 作

实例: 1. 逻辑与的短路运算

2.逻辑或的短路运算

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5690455.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-17
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存