逻辑表达式的计算结果一定是布尔值。
逻辑操作符就是用来编写逻辑表达式的。
!是一个单目逻辑操作符,它可以计算一个布尔值的相反数,这个操作符应该写在一个布尔值的前面。
/*逻辑操作符
*/
#include<stdio.h>
Int main(){
Printf(“!8是%d\n”,!8);
Return 0;
}
双目操作符包括 ==(等于),不等于(!=),大于(>),小于(<),大于等于(>=),
小于等于(<=).
最多包含一个双目逻辑操作符的表达式在计算机里的结果和数字里的结果一定一样的。
可以把做多包含一个双目逻辑操作符的表达式叫做简单逻辑表达式。
所有逻辑表达式必须拆分成多个简单逻辑表达式然后再和并。
与(&&)和或(||)也是双目操作符,它们可以用来合并多个逻辑操作符。
与 和或 都有短路特征,如果前面的逻辑表达式可以决定整个逻辑表达式的结果则计算机忽略后面的逻辑表达式。
/*与 和 或
*/
#include<stdio.h>
Int main(){
Int num=0;
1 || ++num; 整体为真
Printf(“num是%d\n”,num);
Return 0;
}
结果是:num是0;
位操作符直接操作二进制数位。
~ 是一个单目位操作符,这个操作符可以根据一个数位就算出另一个数字。这两个数字在所有制数位上的内容都不一样。~叫做安位求反操作符,这个操作符应该写在一个数字前面。
/*位操作符
*/
#include<stdio.h>
Int main(){
Char ch=~0xc3;
Int num=ch;
Printf(“num是0x%x\n”,num);
Return 0;
}
双目操作符包括按位与(&),按位或(|)和按位异或(^)。它们可以把两个数字对应二进制数位上的内容进行计算。
按位与(&)可以把对应的数位上的内容做 与 计算只要有一个数位是0则计算结果是0.
3 0000 0011
& 5 0000 0101
000 0001
按位或(|)可以把对应的数位上的内容做 或 计算只要有一个数位是1则计算结果是1.
0000 0111
按位异或(^)可以把对应的数位上的内容做 异或 计算,如果两个数位内容一样则异或结果是0,否则为1.
0000 0110
移位操作符可以把一个数字中所有二进制数位的内容统一向左或向右移动n个位置。
》表示向右移动; 《表示向左移动;它们都是双目位操作符。
操作符左边的数字是将要进行移位操作符的数字。
操作符右边的数字是将要移动的位数。
Printf(“3《2是%d\n”,3《2);
结果是3《2是12
移位操作符相当于把每个数位里的内容放到另一个数位里。
向左移位的时候右边空出来的位置上一定填充0.
Num=0x80000000;
Printf(“num》2是0x%x\n”,num》2);
结果是:num》2是0xe0000000
无符号类型数字向左移位后左边空出来的位置上一定填充0;
有符号类型数字向左移位后右边空出来的位置上一定填充符号位。
一般情况下数字向左移动n位相当于乘以2的n次方,向右移动n位相当于除以2的n次方;操作符不会修改任何存储区内容,它们只是会计算一个新数字。
&也可以作为单目操作符使用,这个时候它可以用来计算一个存储区的地址,这个操作符使用的时候应该写在一个存储区的前面。
可以使用 %p 作为占位符把地址数据显示在屏幕上。
/* 地址相关操作符
*/
#include<stdio.h>
Int main(){
Int num=1;
Printf(“&num是%p\n”,&num);
Return 0;
}
*也可以当作单目操作符使用,这个时候它可以根据一个地址找到对应的存储区,这个时候应该把它写在一个地址数据前面。
/* 存储区的寻找
*/
#include<stdio.h>
Int main(){
Int num =0;
*(&(num))=10;
Printf(“num是%d\n”,num);
Return 0;
}
结果是:num是10
三目操作符可以从两套不同的计算规则中选择一套进行计算, 格式如下:
布尔值 ? 公式1 : 公式2
如果布尔值为真就采用公式1进行计算,否则就采用公式2进行计算。
/*三目操作符
*/
#include<stdio.h>
Int main(){
Int num=0;
Printf(“请输入一个数字:”);
Scanf(“%d”,&num);
Num>=0?num:(num=0-num);
Printf(“绝对值是%d\n”,num);
Return 0;
}
不要在问号后面使用赋值操作符。
如果表达式里多个数字不是同一类型则计算机无法完成表达式的计算;这个时候计算机需要首先把所有的数字转换成同一个类型,这个过程由计算机完成,这个叫隐式类转换。
隐式类型转换中一定把占地小的类型转换成占地大的类型。
如果不同类型占地大小一样就把整数类型转换成浮点类型,把有符号类型转换成无符号类型。
C语言里可以随时给数字指定一个类型,这叫做强制类型转换,有可能导致数据丢失。
强制类型转换格式如下:
(char)300; char 一个字节 2^8
Printf(“(char)300是%d\n”,(char)300);
结果是 : (char)300是44.
类转换不会修改任何存储区内容,计算机会使用一个新的存储区记录转换后的数字。