进制运算与位运算

来源:互联网 发布:长安城知乎 编辑:程序博客网 时间:2024/05/21 09:20
不可以在二进制表示形式中使用负号
5     0000 0101 
-5   1111 1011  取反加一既是补码

负数二进制的计算方法是把整数二进制按位求反 再加一 就是补码
每个有符号数据类型中首位为 1 其它位都是 0 的二进制表示这个数据类型的最小数
采用刚才的计算方法同样可以根据负数的二进制补码计算出相反数的二进制补码
任何有符号的二进制数字最左边的数位叫符号位,可以根据它得到数字的正负情况
符号位是 1 表示负数是 0 表示正数
无符号数字没有符号位不能直接把符号位替换成正负号
|
|
二进制 |
|
------------|------------
|
十进制 |
|
|
程序中对数据的所有处理工作最终都会转换成对二进制数位的操作
整数类型之间互相赋值时会保持二进制不变
char ch = 300  printf("%hhd",ch)  结果是 44  
整数占四个字节,字符占一个字节
0000 0000
0000 0000
0000 0001
0010 1011     char 只有最后一行  
有符号整数类型数据扩展时会在前面填充数字的符号位
0000 0000
0000 0000
0000 0000
(1)000 1000    第一个 1 被当作符号

, 是一个操作符 可以把多个表达式连接在一起成为一个表达式
表达式的计算结果是其中最后一个表达式的计算结果
, 操作符的优先级非常低
赋值操作符  =  编写语句也是一个表达式
赋值语句的结果就是赋值的数值
一条语句中如果有多个赋值操作符则先执行右边的然后执行左边的
只需要一个数字配合就可以使用的从操作符叫单目操作符
需要两个数字配合才能使用的操作符叫双目操作符
需要三个数字配合使用的操作符叫三目操作符
大多数双目操作符都可以和赋值操作符合并形成复合赋值操作符  例: *=  /= 等
复合赋值操作符可以对变量中的数字进行处理并把处理结果直接记录在原有变量中
复合赋值操作符都是双目操作符
复合赋值操作符也要求左边是左值(变量) 右边是一个能当数字使用的东西
复合赋值操作符的优先级和赋值操作符的优先级一样
int num = 15;
  num *= 2 + 3;   则 num 结果是 75 
自增操作符 ++ 和自减操作符 -- 可以对变量中的数字做加一或减一操作
这两个操作符都需要和一个变量配合使用
这两个操作符都有前操作和后操作之分
前操作优先级非常高,后操作的优先级非常低
不要在同一条语句中对同一个变量多次做自增自减计算

布尔类型包含真(true)和假(false)两个数值
为了使用布尔类型需要包含 stdbool.h 文件
在计算机里真用 1 表示 假用 0 表示
C 语言中所有整数都可以当布尔数值使用,整数 0 当做布尔值使用时表示假,其他整数当做布尔值使用时表示真。
逻辑表达式的计算结果只能是真或者假 
逻辑操作符用来编写逻辑表达式
双目逻辑操作符包括 == ,!= ,> , >= , < , <=   
! 是一个单目逻辑操作符,表示对一个布尔值求反
算术操作符的优先级比逻辑操作符的优先级高
&& (与)和 || (或)这两个逻辑操作符可以用来编写复杂逻辑表达式
使用 && 合并的两个简单逻辑表达式都为真的时候复杂逻辑表达式的结果是真
使用 || 合并的两个简单逻辑表达式其中有一个为真则复杂逻辑表达式的结果是真
&& 和 || 都具有短路特征
如果可以根据前边的简单表达式就可以判断出整个复杂表达式的结果则后面的简单表达式就不计算了0 && ++num   已判断 0 是假 ,则后面的 ++num 不会执行
位操作符直接对二进制数位进行操作
双目位操作符包括按位与 & 按位或 | 按位异或 ^ 
双目位操作符都首先把参与计算数字的二进制形式写出来然后把对应数位上的数字进行计算
按位与计算时对应数位上只要有一个 0 则这个数位的计算结果就是 0
3  &  5
0000 0011
0000 0101
--------------
0000 0001


按位与可以把某个二进制数位清零
任何数位和 0 做按位与则结果是 0
任何数位和 1 做按位与则结果不变


按位或计算中对应数位上只要有一个 1 则结果是 1
3  |  5
0000 0011
0000 0101
---------------
0000 0111

按位或可以把某个数位置 1 
任何数位和 0 做按位或结果不变
任何数位和 1 做按位或结果是 1 

按位异或计算过程中对应数位上的内容如果一样则结果是 0 否则结果是 1
3  ^  5
  0000 0011
0000 0101             相同为 0 不同为 1
  ----------------
0000 0110


按位异或可以把某个数位求反
任何数位和 0 做按位异或结果不变
任何数位和 1 做按位异或结果改变


练习

1.编写逻辑表达式判断用户给定的年份是否是闰年

能被 4 整除不能被 100 整除 能被四百整除
2. 使用一个char 类型变量控制红绿灯 变量中最右边的三个二进制数位
红  黄  绿 
1    1   1      表示亮
编写语句在不知道变量内容的情况下点亮红灯,
已知绿灯亮,编写语句熄灭绿灯点亮黄灯















0 0
原创粉丝点击