目录本次整理的是c语言入门关于 *** 作符的介绍
- 1. *** 作符的分类
- 2. 算术 *** 作符
- 3. 移位 *** 作符
- 3.1 左移 *** 作符
- 3.2 右移 *** 作符
- 4. 位 *** 作符
- 5. 赋值 *** 作符
- 总结
算术 *** 作符
移位 *** 作符
位 *** 作符
赋值 *** 作符
单目 *** 作符
关系 *** 作符
逻辑 *** 作符
条件 *** 作符
逗号表达式
下标引用、函数调用和结构成员
+ - * / %(加法,减法,乘法,取余,取模)
- 代码演示:
#include
int main()
{
float b = 7 / 2;
float c = 7.0 / 2;
printf("%f\n", b);
printf("%f\n", c);
return 0;
}
运行结果:
注意:对于 / *** 作符如果两个 *** 作数都为整数,执行整数除法,而只要有浮点数执行的就是浮点数除法
- 代码演示:
#include
int main()
{
int a = 7 % 2;
float b = 7 % 2;
printf("%d\n", a);
printf("%d\n", b);
return 0;
}
运行结果:
3. 移位 *** 作符由结果可知:变量的类型使用错误的话,结果也是错误的
还要注意:
除了 % *** 作符之外,其他的几个 *** 作符可以作用于整数和浮点数
% *** 作符的两个 *** 作数必须为整数,返回的是整除之后的余数
<< 左移操作符 >> 右移 *** 作符
- 3.1 左移 *** 作符
移位规则:左边抛弃、右边补0。
整数是 int 型,占4个字节,有32位表示。其中最高位表示符号,0为正,1为负整数。
函数printf打印的是整数的原码
*** 作符对整数 *** 作的流程:
(1)先将整数的原码转换成反码
(2)反码 +1转换成补码
(3)最后对整数的补码进行 *** 作
(4) *** 作结束后,将 *** 作后的补码 -1 转换成反码
(5)将反码转换成最终的原码
正数左移一位:
代码演示:
#include
int main()
{
int a = 2;// 00000000 00000000 00000000 00000010 2的补码
int b = a << 1;// *** 作的补码二进制位,a本身结果不变
printf("%d\n", a);// 2
printf("%d\n", b);// 4
return 0;
}
分析:
运行结果:
结果表明分析是正确的,且正数左移一位相当于乘2,负数分析的思路相同,需要注意负数原码反码补码之间的关系。
注意:对于移位运算符,不要移动负数位,这个是标准未定义的
intnum=10;
num>>-1;//error
- 3.2 右移 *** 作符
分为逻辑移位和算术移位
逻辑移位:左边用0填充,右边丢弃
算术移位:左边用原该值的符号位填充,右边丢弃
右移 *** 作符采用逻辑移位还是算术移位,取决于电脑编译器
正数右移一位(算术移位):
代码演示:
int main()
{
int a = 5;
int b = a >> 1;
printf("%d\n", a);//打印-5
printf("%d\n", b);// -3
return 0;
}
分析:
00000000 00000000 00000000 00000101 5的二进制补码
算术右移:左边用原该值的符号位1填充 右边丢弃1
00000000 00000000 00000000 00000010 右移后的补码
右移后的补码就是右移后的原码 2
运行结果:
位 *** 作符:
& 按位与 相同为1,相异为0
| 按位或 有1为1,全0为0
^ 按位异或 相同为0,相异为1
注:他们的 *** 作数必须是整数
代码演示:
#include
int main()
{
int a = 1;
int b = -2;
int c = a & b;
int d = a | b;
int e = a ^ b;
printf("%d\n", c);
printf("%d\n", d);
printf("%d\n", e);
return 0;
}
分析:
00000000 00000000 00000000 00000001 1的补码
11111111 11111111 11111111 11111110 -2的补码
按位与:相同为1, 相异为0
00000000 00000000 00000000 00000000 0的补码 原码表示0
按位或: 有1为1, 全0为0
11111111 11111111 11111111 11111111 -1的补码 原码表示-1
按位异或: 相同为0, 相异为1
11111111 11111111 11111111 11111111 -1的补码 原码表示-1
运行结果:
结果表明分析的很正确
5. 赋值 *** 作符注意:数据在内存中始终是以二进制存放的。
数值是以补码表示的。
正整数,符号位为0,原码=反码=补码。
负整数,原码转化为反码:符号位为1不变,其余位按位取反;
反码转化为补码:反码+1。
赋值 *** 作符就是能够重新赋值
注意:条件语句中,if(a==10)
易错被写成赋值:if(a=10)
,这时条件为真,语句将执行。
为了避免错误,可写成 if(10==a)
,数值10不能被赋值,写成赋值时会报错。
复合赋值符:
+=
-=
*=
/=
%=
>>=
<<=
&=
|=
^=
int x = 0;
x = x +10;
x+=10;//复合赋值
其他的运算符也是这样的,这样写比较简便。
本篇详细整理了前四种 *** 作符,整理复习的同时也希望能帮到各位刚接触c的朋友们,下期是另外六种 *** 作符的详解。
ヾ(•ω•`)o今天是和小王的第十天🌹🌹🌹下期再见咯!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)