1.算术操作符
+ - % /
除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。 % 和 / 的用法更多: 1.对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。 2.% 操作符的两个操作数必须为整数。返回的是整除之后的余数。2.移位操作符
移位操作符操作的是整数,整数在内存中存储的是补码,打印或者使用时,用的原码值
<< >> 二进制位的移动
一.左移操作符 <<
#include <stdio.h>
int main()
{
int a = 5;
a = a << 2;
// 00000000000000000000000000000101原码 5
// 00000000000000000000000000000101反码
// 00000000000000000000000000000101补码
// 00|00000000000000000000000000010100 20
// 二进制位往左移两位
printf("%d", a);
return 0;
}
左移的规则:左边的抛弃、右边空缺的补0
二.右移操作符 >>
#include <stdio.h>
int main()
{
int i = -5;
i = i >> 2;
// 10000000000000000000000000000101 原码 -5
// 11111111111111111111111111111010 反码
// 11111111111111111111111111111011 补码
// 二进制位往右移两位
// 11111111111111111111111111111110|11 补码
// 11111111111111111111111111111101 反码
// 10000000000000000000000000000010 原码 -2
printf("%d", i);
return 0;
}
右移的规则:
1. 逻辑移位左边用0填充,右边丢弃
2. 算术移位左边用原该值的符号位填充,右边丢弃(现在的编译器一般为第二种移位规则)
*******对于移位计算符,需要注意的是:
不要移动负数位,这个是标准未定义的
3.位操作符
& 按位与 | 按位或 ^ 按位异
它们的操作数必须为整数
用一道练习来加深理解:
不能创建临时变量(第三个变量),实现两个数的交换
#include <stdio.h>
int main()
{
int a = 5;
int b = 3;
printf("打印前:a=%d,b=%d\n", a, b);
a = a ^ b;
b = a ^ b;//此时的a = a^b,所以 b = a^b = a^b^b 。此处b^b=0 , b = a^(b^b)= a^0 = a
a = a ^ b;//由上可知b = a , a = a^b ,所以a = a^b^b 。此处a^a=0 , a = (a^a)^b = b
printf("交换后: a=%d,b=%d\n", a, b);
return 0;
}
4.单目操作符
! 逻辑反操作 - 负值 + 正值 & 取地址 sizeof 操作数的类型长度(以字节为单位) ~ 对一个数的二进制按位取反 -- 前置、后置 -- ++ 前置、后置 ++ * 间接访问操作符 ( 解引用操作符 ) ( 类型 ) 强制类型转换标签:操作数,int,整数,详解,按位,操作符,移位 来源: https://blog.csdn.net/qq_61434514/article/details/121290885
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。