C语言入门篇–充分理解操作符

目录1.算术操作符1.1除法运算1.2取模运算2.移位操作符相关知识1.移位运算是站在二进制角度移位的2.左移右移,原始变量值不发生变化除非给原始变量赋值3.整数移位运算不能整除时,只保留整数部分4.C语言中的移位运算符5.移位分为算术移左移、算术移右移和逻辑左移、逻辑右移3.位操作符3.1按位与&3.2按位或 |3.3异或 ^4.赋值操作符5.单目操作符5.1 逻辑反操作 !5.2 负值 – 正值 +5.3 取地址 &5.4 取反 ~5.5 前置、后置 ++ – -5.6 解引用操作符 *5.7 强制类型转换 (类型)6.关系操作符7.逻辑操作符8.条件操作符9.逗号表达式10.下标引用、函数调用和结构成员

1.算术操作符

+ 加- 减* 乘/ 除% 取模

1.1除法运算

除法运算分母不可为零,否则程序会中断报错,所以要在程序中检验分母是否为零。

1.2取模运算

取模即取余数。

2.移位操作符

相关知识

>> 右移<< 左移

1.移位运算是站在二进制角度移位的

eg:

#include <stdio.h>int main(){int x = 15;printf("%d\n", x>>1);printf("%d\n", x<<1);printf("%d\n", x);x = x >> 1;printf("%d\n", x);return 0;}

2.左移右移,原始变量值不发生变化除非给原始变量赋值

3.整数移位运算不能整除时,只保留整数部分

4.C语言中的移位运算符

(如<<>>)只能用于整型(如intshortlongchar等),不能用于浮点型(如doublefloat

5.移位分为算术移左移、算术移右移和逻辑左移、逻辑右移

算术左移和算术右移主要用来进行有符号数的倍增、减半;

逻辑左移和逻辑右移主要用来进行无符号数的倍增、减半。

3.位操作符

位操作是站在二进制角度进行操作的。

& 按位与| 按位或^ 按位异或

3.1按位与&

eg:

参与按位与的两二进制位数都为真(1)结果为真,否则只要有一个为假(0)结果为假。

#include <stdio.h>int main(){printf("%d\n", 1 & 1);printf("%d\n", 0 & 1);printf("%d\n", 1 & 0);printf("%d\n", 0 & 0);printf("%d\n", 2 & 6);return 0;}

3.2按位或 |

参与按位与的两二进制位数只要有一个为真(1)结果为真,若都为假(0)结果为假。

eg:

#include <stdio.h>int main(){printf("%d\n", 1 | 1);printf("%d\n", 0 | 1);printf("%d\n", 1 | 0);printf("%d\n", 0 | 0);printf("%d\n", 2 | 6);return 0;}

3.3异或 ^

参与按位与的两二进制位数相同为假,不同为真。

eg:

#include <stdio.h>int main(){printf("%d\n", 1 ^ 1);printf("%d\n", 0 ^ 1);printf("%d\n", 1 ^ 0);printf("%d\n", 0 ^ 0);printf("%d\n", 2 ^ 6);return 0;}

4.赋值操作符

= += -= *= /= &= ^= |= >>= <<=

#include <stdio.h>int main(){int x1 = 0;x1 = 10;//赋值 从右向左赋值printf("%d\n", x1);int x2 = 20;x2 += 10;//加等 等价于x=x+10; //其他操作符类似printf("%d\n", x2);return 0;}

5.单目操作符

单目操作符即只有一个操作数的操作符。

! 逻辑反操作- 负值+ 正值& 取地址sizeof 操作数的类型长度(以字节为单位)~ 对一个数的二进制按位取反– 前置、后置–++ 前置、后置++* 间接访问操作符(解引用操作符) (类型) 强制类型转换

5.1 逻辑反操作 !

逻辑真–>非0

逻辑假–>0

eg:

#include<stdio.h>int main(){int flag = 1;if (!flag)//(flag==1)条件为真即非零,取反(!)后if条件为假即0{printf("if条件为真!\n");}else{printf("if条件为假!\n");}return 0;}

5.2 负值 – 正值 +

给数字前带+ -变成对应的正数或负数。

eg:

#include <stdio.h>#include <windows.h>int main(){int x1 = 10;printf("%d\n", +x1);printf("%d\n", -x1);int x2 = -10;printf("%d\n", +x2);printf("%d\n", -x2);return 0;}

5.3 取地址 &

每个变量在内存中都有对应的地址。

eg:

#include <stdio.h>int main(){int x = 10;printf("%d\n", x);printf("0x%p\n", &x);//%p:以十六进制打印地址;加0x:为了打印出来的是变量所对应的标准地址。return 0;}

5.4 取反 ~

对一个数的二进制按位取反。

eg:

#include <stdio.h>int main(){unsigned x = 1;printf("%u\n", x);printf("%u\n", ~x);return 0;}

5.5 前置、后置 ++ – –

++i :前置++,先自增再赋值使用。

i++ :后置++,先赋值使用再自增。

(- -同理)

eg:

#include <stdio.h>int main(){int i = 3;int a = i++;printf("%d\n", i);printf("%d\n", a);///int j = 10;int b = ++j;printf("%d\n", j);printf("%d\n", b);return 0;}

5.6 解引用操作符 *

eg:关于解引用操作符 的理解以看变量的左值与右值。

#include <windows.h>int main(){int a = 10;int *p = &a;//指针p指向变量aint b=*p;//*p即解引用指针p,取出指针p所指地址空间里的值,然后赋给变量bprintf("%d\n", b);return 0;}

5.7 强制类型转换 (类型)

强制类型转换是把变量从一种类型转换为另一种数据类型。

强制类型转换分为隐式转换和显示转换。

eg:

#include <stdio.h>int main(){int a = 10;double b = 3.456;a = b;//隐式转换printf("%d\n", a);    ///int c = 20;double d = 5.555;c = (int)d;//显式转换printf("%d\n", c);return 0;}

6.关系操作符

关系操作符就是用来判断大小关系。

>>=<<=!= 用于测试“不相等”== 用于测试“相等”

7.逻辑操作符

&& 逻辑与|| 逻辑或

&& 两边的表达式都为真,结果为真。

| | 两边的表达式只要有一个为真,结果为真。

注意:

&&和| |的判断规则:

&& 若第一个表达式为假,结果为假,则不判断第二个表达式。

| | 若第一个表达式为真,结果为真,则不判断第二个表达式。

8.条件操作符

exp1 ? exp2 : exp3//又称三目操作符,它是唯一有3个操作数的运算符

若表达式exp1为真,则执行exp2;若表达式exp1为假,则执行exp3;

9.逗号表达式

1.逗号表达式中的每个表达式都会执行。

2.逗号表达式中的结果为最后一个表达式的值。

3.可以用()隔开逗号表达式。

exp1, exp2, exp3, …expN

eg:

#include <stdio.h>int main(){int a = 10;int b = 20;int c = 0;int d = ((c=a+b), 2, 3, 4, 5, 6, 7);printf("c=%d\n", c);printf("d=%d\n", d);return 0;}

10.下标引用、函数调用和结构成员

[] //中括号操作符,访问要访问元素的内容() //函数访问操作符,要调用函数就要在函数名后加(),若函数有参数,则把参数填入(). //结构体成员运算符,左边必须为实体即变量-> //结构体指针运算符,左边必须为指针

以上就是C语言入门篇–充分理解操作符的详细内容,更多关于C语言操作符的资料请关注其它相关文章!

坦然接受生活给你的馈赠吧,不管是好的还是坏的。

C语言入门篇–充分理解操作符

相关文章:

你感兴趣的文章:

标签云: