【C语言】操作符

xiaoxiao2021-02-28  110

1、操作符代表对数字的处理规则

2、根据操作符所需要配合的数字个数把操作符分为单目操作符,双目操作符和三目操作符

3、C语言里用+,-,*和/代表加减乘除四则运算符号

4、如果参与除法计算的两个数字都是整数则计算结果只保留整数部分

5、取余操作用%表示

6、赋值操作符用=表示它可以把一个数字记录到一个存储区里

7、赋值语句可以当作数字使用,这个数字就是赋值完成后左边存储区里的数字

8、可以在一条语句里使用多个赋值操作符,这个时候先计算右边的操作符

9、C语言里绝大多数双目操作符可以和赋值操作符合并形成复合赋值操作符,例如+=, %=等

10、复合赋值操作符左边必须是一个存储区,右边必须是一个数字

11、复合赋值操作符会把双目操作符的结果记录到左边的存储区里

12、复合赋值操作符的优先级和赋值操作符一样低

13、自增操作符(++)和自减操作符(–)都是单目操作符,它们都只能和存储区配合使用,它们可以把存储区的内容做加一或减一操作

14、它们都有两种使用方法,一种是前操作(操作符写在存储区前面)另外一种是后操作(操作符写在存储区后面)

15、使用自增或自减操作符编写的表达式本身也可以当作数字使用。前操作当作数字使用的时候是修改后的数字,后操作当作数字使用的时候是修改前的数字。

16、不要在一条语句里对同一个变量多次进行自增或自减计算,因为结果不确定

17、逻辑操作符用来编写逻辑表达式

18、逻辑表达式的结果一定是布尔值

19、!是一个单目逻辑操作符,它表示对一个布尔值求反(真变假,假变真)

20、双目逻辑操作符包括等于(==),不等于(!=)大于(>),小于(<),大于等于(>=)和小于等于(<=)

21、如果一个表达式里最多包含一个双目逻辑操作符,它在计算机里的结果和在数学里的结果一定一样。这种表达式叫做简单逻辑表达式。

22、如果一个表达式里包含多个双目逻辑操作符就必须首先拆分成多个简单逻辑表达式然后再合并

23、与(&&)和或(||)也是双目逻辑操作符,他们可以把两个逻辑表达式合并成一个

24、如果原来的两个逻辑表达式里有一个的结果是假则用与(&&)合并后的逻辑表达式结果也一定是假

25、如果原来的两个逻辑表达式里有一个的结果是真则用或(||)合并后的逻辑表达式结果也一定是真

26、与(&&)和或(||)都具有短路特征(如果前面的逻辑表达式结果可以决定整个逻辑表达式的结果就不计算后一个逻辑表达式)

27、位操作符可以直接操作二进制数位

28、~是一个单目位操作符它可以根据一个数字计算出另外一个数字,这两个数字的所有二进制数位内容都不一样(按位求反)

29、双目位操作符包括按位与(&),按位或(|)和按位异或(^)它们都可以把两个数字对应二进制数位的内容做计算

30、按位与(&)可以把对应数位的内容做与计算只要一个数位的内容是0则与计算的结果就是0

3 0000 0011 & 5 0000 0101 0000 0001

31、按位或(|)可以把两个数字对应数位的内容做或计算如果一个数位的内容是1则或计算以后结果

32、异或(^)可以把两个数字对应数位的内容做异或计算如果两个数位的内容一样则异或以后结果是0,否则结果是1

33、移位操作符可以把一个数字里所有二进制数位的内容统一向左或向右移动n个位置>>表示向右移位<<表示向左移位它们都是双目位操作符

34、操作符左边的数字是将要进行移位操作的数字

35、操作符右边的数字是将要移动的位数

36、移位操作相当于把每个数位的内容换一个数位放

37、向左移位的时候一定在右边空出来的数位里填充0

38、有符号类型数字右移时左边空出来的数位里一定填充符号位的内容,无符号类型数字右移时左边空出来的数位里一定填充0

39、一般情况下数字向左移动n位相当于乘以2的n次方,向右移动n位相当于除以2的n次方

40、位操作符不会修改现有存储区的内容

41、&也可以作为单目操作符使用,这个时候它可以根据一个存储区计算出存储区的地址

42、可以使用%p做占位符把地址数据显示在屏幕上

43、我们的计算机里所有地址都是32个二进制数位构成的

44、*也可以作为单目操作符使用,这个时候它可以根据地址找到地址对应的存储区

45、三目操作符可以从两套不同的计算规则中选择一套进行计算

46、三目操作符格式如下

布尔值 ? 公式一 : 公式二

47、如果布尔值是真就采用公式一进行计算,否则采用公式二进行计算

48、不要在问号后使用赋值操作符

/* * 操作符练习 * */ #include <stdio.h> int main() { int num = 0; unsigned char ch = 0x80; printf("请输入一个数字:"); scanf("%d", &num); printf("转换结果是"); printf("%d", (num & ch) != 0); ch >>= 1; printf("%d", (num & ch) != 0); ch >>= 1; printf("%d", (num & ch) != 0); ch >>= 1; printf("%d ", (num & ch) != 0); ch >>= 1; printf("%d", (num & ch) != 0); ch >>= 1; printf("%d", (num & ch) != 0); ch >>= 1; printf("%d", (num & ch) != 0); ch >>= 1; printf("%d\n", (num & ch) != 0); return 0; } /* * 三目表达式演示 * */ #include <stdio.h> int main() { int num = 0; printf("请输入一个数字:"); scanf("%d", &num); num = num >= 0 ? num : 0 - num; //num >= 0 ? num = num : num = 0 - num; 错误 printf("绝对值是%d\n", num); return 0; } /* * 地址相关操作符演示 * */ #include <stdio.h> int main() { int num = 0; printf("&num是%p\n", &num); *(&num) = 10; printf("num是%d\n", num); return 0; } /* * 位操作符演示 * */ #include <stdio.h> int main() { char ch = ~0x97; int num = ch; printf("num是0x%x\n", num); printf("3 & 5是%d\n", 3 & 5); printf("3 | 5是%d\n", 3 | 5); printf("3 ^ 5是%d\n", 3 ^ 5); printf("3 << 2是%d\n", 3 << 2); num = 0x40000000; printf("num >> 2是0x%x\n", num >> 2); num = 0x80000000; printf("num >> 2是0x%x\n", num >> 2); return 0; } /* * 逻辑操作符演示 * */ #include <stdio.h> int main() { int num = 0; printf("!7是%d\n", !7); printf("3 < 7 < 5是%d\n", 3 < 7 < 5); printf("3 < 7 && 7 < 5是%d\n", 3 < 7 && 7 < 5); 1 || ++num; printf("num是%d\n", num); 0 && ++num; printf("num是%d\n", num); return 0; } /* * 操作符演示 * */ #include <stdio.h> int num2; int main() { char ch = 0; int num = 0, num1 = 0; num = ch = 300; printf("num是%d\n", num); num += 6; printf("num是%d\n", num); num *= 2 + 3; printf("num是%d\n", num); num = 10; num1 = num++; printf("num是%d\n", num); printf("num1是%d\n", num1); num1 = ++num; printf("num是%d\n", num); printf("num1是%d\n", num1); num = 10; num1 = num++ + ++num; printf("num是%d,num1是%d\n", num, num1); num2 = 10; num1 = num2++ + ++num2; printf("num2是%d,num1是%d\n", num2, num1); return 0; }
转载请注明原文地址: https://www.6miu.com/read-46144.html

最新回复(0)