Day05_C操作符及二进制补码计算

回顾:
 1.数据类型
 2.二进制(八进制,十六进制)
---------------------------------------------------------
计算机中不可以使用负号表示负数

计算负数二进制的过程:
 1.计算出相反数的二进制
 2.把上一步的结果按位求反再加一
使用上述方法计算出的结果就是二进制补码,可以直接存储在计算机中

所有数据类型中,左边一个 1 右边全 0 的二进制表示这个类型中的最小数
-55 -->  55  --> 32 + 16 + 4 + 2 + 1 --> 0011 0111 -->1100 1000 + 1 --> 1100 1001
-96 --> 96 --> 64 + 32 --> 0110 0000 --> 1001 1111 + 1 -->1010 0000

使用上述方法可以根据任意二进制补码计算相反数的补码

所有负数的二进制补码最左边数位一定是1
有符号数据最左边一个数位是1则表示负数

有符号数据最左边数位叫做符号位
符号位不等同于符号,仅仅是能表示符号

整数类型之间赋值的过程中会保持二进制不变
在整数类型赋值过程中如果需要扩展则扩展有符号数据的符号位

-----------------------操作符--------------------------
 , 是一个操作符,可以用来连接两个简单表达式
用 , 编写的表达式的计算结果是最后一个简单表达式的计算结果
 , 操作符的优先级非常低

赋值操作符(=)可以用来改变变量的内容
赋值操作符左边必须是一个值,可以简单的理解为变量
赋值操作符右边必须是一个可以当作数字使用的东西;
赋值操作符的优先级非常低
一条语句中可以包含多个操作符,计算顺序是先计算右边的后计算左边的;


C语言中按照操作符所需要的数字个数对操作符进行了分组
单目操作符只需要一个数字
双目操作符需要两个数字
三目操作符需要三个数字

绝大多数双目操作符可以和赋值操作符合并形成复合赋值操作符 (例如,+= ,-=,*=,%=等)
复合赋值操作符可以把计算结果记录在某个参与计算的变量中
复合赋值操作符也都是双目操作符
复合赋值操作符前面的必须是一个变量,后面是一个可以当数字使用的东西
复合赋值操作符的优先级和赋值操作符优先级一样

自增操作符(++)和自减操作符(--)可以对一个变量进行加一或减一操作
自增和自减操作符都是单目操作符,与它们配合使用的必须是一个变量
自增和自减都存在前操作和后操作两种方式
前操作的优先级非常高,后操作的优先级非常低
不要在同一条语句中对同一个变量多次进行自增或自减计算

布尔类型包含两个数据,一个是真(true)另一个是假(false)
在计算机中真用1表示,假用0表示
为了在程序中使用布尔类型,需要包含stdbool.h文件

任何整数数据都可以当成布尔类型数据使用。
数字0当作布尔值使用时是假,其它整数当布尔值使用时是真

逻辑表达式的计算结果只能是真或者假
逻辑操作符用来编写逻辑表达式
双目逻辑操作符包括 ==,!=,>,<,>=,<=
!是一个单目逻辑操作符,它表示对一个现有的布尔值进行求反操作

逻辑操作符的优先级比算术操作符的优先级低

与(&&)和 或(||)也是两个双目逻辑操作符,它们可以用来连接两个简单逻辑表达式
如果多个简单逻辑表达式的计算结果都是真,则用 与 把它们连接起来以后得到的复杂逻辑表达式的计算结果也为真
如果多个简单逻辑表达式的计算结果中有一个是真则用 或 把它们连接起来以后得到的复杂逻辑表达式的结果就是真

与(&&)和 或(||)都具有短路特征:
如果复杂逻辑表达式中前面的部分已经决定了整个结果则后面的部分根本不会计算。

位操作符直接对二进制数据位进行操作
双目位操作符包括按位与(&)按位或(|)以及按位异或(^)

按位与(&)把对应数位上的数字进行与计算
 0 & 0  0
 1 & 1  1
 0 & 1   0
3 0000 0011
5 0000 0101
 0000 0001        (同1出1)
按位或(|)把对应数位上的数字进行或计算
 0 | 0  0
 1 | 1   1
 0 | 1  1
3 0000 0011
5 0000 0101
    0000 0111         (有1出1)
按位或可以把一个字节中任何一个数位设置成1
任何数字和0按位或结果不变
任何数字和1按位或结果是1

按位异或(^)把对应数位上的数字进行异或操作
 0 ^ 0  0
 1 ^ 1  0
 0 ^ 1  1
3 0000 0011
5 0000 0101
 0000 0110          (相同出0)
按位异或可以把一个字节中的某些数位求反
任何数字和0按位异或结果不变
任何数字和1按位异或则求反

预习:
 1.其它位操作符
 2.三目操作符
 3.类型转换
 4.分支(if,switch..case)
 5.循环(for)

作业:
 1.编写逻辑表达式判断某个年份是不是闰年
    (可以被4整除但是不能被100整除 或 可以被400整除)
     2.使用一个char类型变量的最右边三个二进制数位控制红绿灯,顺序是红黄绿。如果对应数位上是1则灯亮,否则等灭。
     1)编写语句在不知道变量内容的情况下点亮红灯,熄灭另外两盏灯(0000 0100)
     2)如果已知绿灯亮,其它灯灭。编写语句熄灭绿灯点亮黄灯


原文地址:https://www.cnblogs.com/fuhaots2009/p/3363285.html