8

【C语言】算术运算符、移位操作符、位操作符详细讲解。

 1 year ago
source link: https://blog.51cto.com/u_15814021/5745933
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

🚩write in front🚩   

🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎

🏅2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~阿里云专家博主 & 星级博主~掘金⇿InfoQ~51CTOP创作者~周榜92﹣总榜886⇿全网访问量35w+🏅

🆔本文由 謓泽 原创 发布在51CTOP 如需转载还请通知⚠

📝个人主页-​ ​謓泽51Ctop的博客​​📃

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝

📣系列专栏-​ ​謓泽51Ctop的分类_51CTO博客​​🎓

✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩

【C语言】算术运算符、移位操作符、位操作符详细讲解。_#include

🎓算术运算符 

🖊 加法运算符("+")

  • 又称之为 双目运算符,即应该有两个变量参加运算,具有右结合性。描述:把两个操作数相加。

​#include<stdio.h> int main(void){ printf("Arabic numerals = %d",1+1); return 0; }​

运行结果:Arabic numerals = 2


🖊 减法运算符("-")

  • 又称之为 双目运算符,但"-"也可作负值运算符,此时为单目运算符。描述:从第一个操作数中减去第二个操作数。

​#include<stdio.h> int main(void){ printf("Arabic numerals = %d",1-1); return 0; }​

运行结果:Arabic numerals = 0


🖊 乘法运算符("*") 

  • 又称之为 双目运算符,具有左结合性。描述:把两个操作数相乘。

​#include<stdio.h> int main(void){ printf("Arabic numerals = %d\n",2 * 2); return 0; }​

注意:数学上的是乘法(x),而在我们编程当中是星号(*)。

运行结果:Arabic numerals = 4


🖊 除法运算符("/")

  • 又称之为 双目运算符,具有左结合性。参与运算量均为整型时,结果也为整型,舍 去小数。如果运算量中有一个是实型,则结果为双精度实型。描述:分子除以分母。

注意:数学上的是除法(÷),而在我们编程当中的是斜杠(/)。

下面用代码演示下:除法演示

​#define #include <stdio.h> int main(void){ int a = 10; int a1 = 10; int b = 3; float b1 = 3.0; int c = a / b; float c1 = a / b1; printf("Take integer = %d\n", c); printf("Take decimal = %lf\n",c1); return 0; }​

上述👆代码编译运行结果:

【C语言】算术运算符、移位操作符、位操作符详细讲解。_双目运算符_02

🖊 取模运算符("%") 

  • 描述:分子除以分母,例如:8%3 = 2

注意:取模操作符是只能对整数进行取模的,而不能对小数进行取模运算。

取模运算符练习:算出 100~200 当中能被 2 除以的数字打印出来,并且用 count 计次打印出来的总数。代码示例显示如下:

​#include <stdio.h> int main(void){ int i; int Count = 0; for (i = 100; i <= 200; i++) { if (i % 2 == 0) { printf("%d ", i); Count++; } } printf("\nCount = %d\n", Count); return 0; }​

上述👆代码编译运行结果:

【C语言】算术运算符、移位操作符、位操作符详细讲解。_#include_03


🎓移位操作符 

  • 二进制左移运算符("<<"),将一个运算对象的各二进制位全部左移若干位 (左边的二进制位丢弃,右边补0)
  • 注:高位丢弃,低位补0。
  • 二进制右移运算符(">>"),将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。算数右移补的是最高位的数字,逻辑右移补的都是0。注意:我们通常都是采用的是算数右移的方式!
  • 注:低位丢弃,高位补0『正数补0、负数补1』

​<<(左移):最高位丢弃,最低位补0 >>(右移)如下↓ 1.无符号数(unsigned):最低位丢弃,最高位补0 2.有符号数(signed):最低位丢弃,最高位补符号位.(★) 注:取决于数据类型​

例如 A = 2,A<<1,得到的数字是:4

  • 00000000000000000000000000000010
  • 00000000000000000000000000000100

例如 A = 2,A>>1,得到的数字是:1

  • 00000000000000000000000000000010
  • 00000000000000000000000000000001

注意:在按位移动的时候,我们要移动正常的位数,你可不能移动100位那就出大问题

 ⚠:对于移位运算符,不要移动负数位,这个是标准当中未定义的。 

​int num = 2; num << -5; //错误​


🎓位操作符 

🖊 按位与运算符("&")

  • 双目运算符。其功能是参与运算的两数各对应的二进位相与,只有对应的两个二进位均为 1 时,结果位才为 1,否则为 0。参与运算的数以补码方式出现。

运算规则

0&0=0;
0&1=0;
1&0=0;
1&1=1;

例如:9 & 5,代码如下所示:

#include <stdio.h>
int main(void){
int a = 9; //00001001 - 9
int b = 5; //00000101 - 5
int c = a & b; //00000001 - 1
printf("number = %d\n", c);
return 0;
}
  • 运行结果:number = 1

🖊 按位或运算符("|")

  • 双目运算符。其功能是参与运算的两数各对应的二进位相或。只要 对应的二个二进位有一个为 1 时,结果位就为 1。参与运算的两个数均以补码出现。

运算规则

0|0=0;
0|1=1;
1|0=1;
1|1=1;

例如:9 & 5,代码如下所示:

#include <stdio.h>
int main(void){
int a = 9; //00001001 - 9
int b = 5; //00000101 - 5
int c = a | b; //00001100 - 12
printf("number = %d\n", c);
return 0;
}
  • 运行结果:number = 1

🖊 按位异或运算符("^") 

  • 参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。
  • 相同为0,一个数字异或上了0就相当于本身的那个数字。

运算规则

0^0=0;
0^1=1;
1^0=1;
1^1=0;

例如:将 a = 9 和 b = 5 的值进行交换,不能创建变量进行交换!代码如下所示:

#include <stdio.h>
int main(void){
int a = 9;
int b = 5;
printf("交换之前:a = %d b = %d\n", a, b);
a = a ^ b; // 1001 ^ 0101 = 1100 (12)
b = a ^ b; // 1100 ^ 0101 = 1001 (9)
a = a ^ b; // 1100 ^ 1001 = 0101 (5)
printf("交换之后:a = %d b = %d\n", a, b);
return 0;
}

从上面代码我们可以知道,按位异或(^),可以不用创建临时变量达到交换两个数字的值。 

  • 运行结果:交换之前:a = 9    b = 5换行a = 5    b = 9
  • 注:位操作符都必须是整数!

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK