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语言中的移位运算符
(如<<
、>>
)只能用于整型(如int
、short
、long
、char
等),不能用于浮点型(如double
、float
)
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指向变量a int b=*p;//*p即解引用指针p,取出指针p所指地址空间里的值,然后赋给变量b printf("%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语言操作符的资料请关注我们其它相关文章!