首页 > 编程知识 正文

c语言运算功能丰富,c语言位运算符怎么运算

时间:2023-05-04 00:23:00 阅读:268939 作者:600

目录

基本知识

四个妙用

1.判断整型变量奇偶   

原理

代码

2.交换变量

原理

代码

3.乘/除2的n次         

原理

代码

4.对2的次幂取余

原理

代码

5.得到整型变量二进制形式某位置的值

原理

 代码

全部代码

实验结果截图


基本知识

我们常用十进制,计算机内部存储的是二进制,用位运算会快一点。在需要大量运算是,位运算能节省时间,提高oj的通过率。

四个妙用 1.判断整型变量奇偶   

使用位运算符:&

原理

2的0次是1,2的1次是2。根据按权展开可知,只需判断最后一位即可。1的二进制是000...001。根据&运算符的特点,奇数末位是1,和1与为1,偶数则为0。

代码 //判断int类型变量奇偶bool Judge(int n){return(n&1);//奇数返回1,偶数返回0} 2.交换变量

使用位运算符:^

原理

两个数相同,则返回0,否则,返回1。a=a^b;b=(a^b)^b=a;a=(a^b)^a=b;

代码 //交换变量 利用异或void Change(){int a, b;printf("请输入两个整数:n");scanf("%d %d",&a,&b);printf("%d %d交换后为:", a, b);a ^= b;b ^= a;a ^= b;printf("%d %dn", a, b);} 3.乘/除2的n次         

 使用位运算符:<<和>> 乘用的比较多

原理

移位。不溢出的情况下,左移补0,就是乘2了。除是右移,类似,但是可能损失精度。

代码 //num乘2的n次int Multi(int num, int n){return num << n;}//num除2的n次int Devide(int num, int n){return num >> n;} 4.对2的次幂取余

 使用位运算符:&

原理

例如,15对8取余,15的二进制是00...01111   最多就是余7喽。8-1就是7,二进制为00...111,和00...0111相与就是余数7。

代码 //得到余数int Yu(int num,int n){int i = 1 << n;return num&(i-1);} 5.得到整型变量二进制形式某位置的值 原理

向右移位与1进行“&”操作,可以用来得到二进制。

位置43210整数(十进制)                                       20二进制10100 代码 //取十进制整型变量a的二进制形式的第k位int GetWei(int n, int k){int m;m = n >> k & 1;return m;} 全部代码 /*Project: bitwise_useful(位运算的妙用)Date: 2019/03/01Author: Frank Yu*/#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<string>#include<set>#include<list>#include<vector>#include<map>#include<stack>#include<iterator>#include<algorithm>#include<iostream>using namespace std;#define F(i,m,n) for(int i=m;i<n;i++)//***************************基本操作函数*********************************////判断int类型变量奇偶bool Judge(int n){return(n & 1);//奇数返回1,偶数返回0}//取十进制整型变量a的二进制形式的第k位int GetWei(int n, int k){int m;m = n >> k & 1;return m;}//num乘2的n次int Multi(int num, int n){return num << n;}//num除2的n次int Devide(int num, int n){return num >> n;}//得到余数int Yu(int num, int n){int i = 1 << n;return num&(i - 1);}//****************************功能实现函数*********************************////菜单void menu(){printf("********1.判断整型变量奇偶 2.交换变量*********n");printf("********3.乘/除2的n次 4.对2的次幂取余*********n");printf("********5.取整型变量a的二进制第k位 6.退出*********n");}//判断奇偶void OddOrEven(){int n;printf("请输入一个整数:n");scanf("%d", &n);if (Judge(n)) printf("%d是一个奇数!n", n);else printf("%d是一个偶数!n", n);}//交换变量 利用异或void Change(){int a, b;printf("请输入两个整数:n");scanf("%d %d", &a, &b);printf("%d %d交换后为:", a, b);a ^= b;b ^= a;a ^= b;printf("%d %dn", a, b);}//乘或除2的次void MulOrDe(){int num, n;printf("请输入一个整数:n");scanf("%d", &num);printf("请输入次数:n");scanf("%d", &n);printf("%d乘2的%d次等于%dn", num, n, Multi(num, n));printf("%d除2的%d次等于%dn", num, n, Devide(num, n));}//取余 a%b b为2的多少次时可以void QuYu(){int num, n;printf("请输入一个整数:n");scanf("%d", &num);printf("请输入次数:n");scanf("%d", &n);printf("%d对2的%d次取余等于%dn", num, n, Yu(num, n));}//得到第k位void Wei(){int n, k;printf("请输入一个整数:n");scanf("%d", &n);printf("请输入要获取第几位:n");scanf("%d", &k);printf("%d的第%d位是%d!n", n, k, GetWei(n, k));}//主函数int main(){int choice;while (1){menu();printf("请输入菜单序号:n");scanf("%d", &choice);if (6 == choice) break;switch (choice){case 1:OddOrEven(); break;case 2:Change(); break;case 3:MulOrDe(); break;case 4:QuYu(); break;case 5:Wei(); break;default:printf("输入错误!!!n"); break;}}return 0;} 实验结果截图 实验结果截图 实验结果截图

更多数据结构与算法实现:数据结构(甜美的诺言版)与算法的实现(含全部代码)

有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。