首页 / 算法 / 算法入门—数字游戏—二进制—运算符
算法入门—数字游戏—二进制—运算符
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了算法入门—数字游戏—二进制—运算符,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2413字,纯文字阅读大概需要4分钟。
内容图文
![算法入门—数字游戏—二进制—运算符](/upload/InfoBanner/zyjiaocheng/598/7b7ff833cbac42a7bb868a20780bbb41.jpg)
Day1 数字游戏—算法初识
两年计科人居然刚刚开始反思算法的东西真的很惭愧,不过还是庆幸开始了!
1. 交换两个数三种解法(digital switch)
a.中间变量(浪费内存)
b.三次异或(只适用于int型)
c.加法操作(有几率溢出)
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
int main()
{
while(1)
{
int x,y;
cin>>x>>y;
x=x^y;
y=x^y;
x=x^y;
cout<<x<<endl;
cout<<y<<endl;
}
return 0;
}
2. 判断奇偶数两种方法(odd/even number)
a.num%2=0/1;
b. num&1=1偶数 num&1=0奇数
#include<stdlib.h>
#include<iostream>
using namespace std;
int main()
{
while(1)
{
int x;
cin>>x;
if((x&1)==0)//加括号!!!不加试试,看不出错就cout<<x&1 报错运算符优先级!! == >> <<优先级比&(按位与)高
cout<<"偶数"<<endl;
if((x&1)==1)
cout<<"奇数"<<endl;
}
return 0;
}
3. 数字异或^
两个数字相当于两个数的无进位加法
num^num=0
num^0=num
(num1 ^ num2 ^ num3^ num4)屏蔽掉同的num
应用:
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
int a[101]={0} ;
int main()
{
for(int i=0;i<100;i++)//把a数组里装入1~100个数
a[i]=i+1;
a[100]=86;//这一百个数中需要找出重复的这一个数
int x=0;
for(int j=0;j<=100;j++)
x=x^a[j]^j;
cout<<x<<endl;
return 0;
}
4.与2有关的数们(二进制,移位,与,异或)
看到与2有关的讨论,首先想想是不是和二进制有关,二进制就有与 异或 移位等操作
(思考)一个数用二进制表示 每一位的1都代表2的整数次方,也隐含着对这个数关于2的整数次方的最佳划分。
- 例1判断一个二进制表示的某一位是0还是1
-对num先移位,而且不能带符号用>>>不带符号的右移(java特有的语法),比如右移两位再&1就知道第三位上的数是0还是1
-对这个二进制数和0010000做&就得到这个数1所在位置的对应的数的位置,因为0和别的数做与运算就可以都变成零,然后再进行移位 &1 - 例2求一个整数的二进制表示中1的个数
-逐个移位&1
-一个二进制数num 减一操作的结果是num最低位的一个1和后面的全部都取反 例如101100-1=101011 反着的部分&之后就是0 则num&(num-1)是消灭了最低位的1 ,不断重复这个过程,就是从低位开始到高位一个个1消灭,到最后这个数变为0 为止,那消灭了几次num中就有几个1 - 例3 判断一个整数是不是2的整数次方
-那就是判断一个数的二进制表示是不是只有一个1
这几个例子是渐进的 所以直接做第三题!
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
int main()
{
int k;
cin>>k;
int t=0;
while(k!=0)
{
k=k&(k-1);
t++;
}
cout<<t<<endl;
}
今天上算法设计与分析!!
没想到我正在思考的问题巧妙地出现在了课堂上
对于生成一个数是二的几次方 比如你在设计一个算法生成一个二维数组每次数组长度都两倍增长,2^0 2^1 2^2 2^3 ……一般采用每次乘2 ,看过上面的二进制表示相关可以想到每次都用1<<k来实现 2^k !
内容总结
以上是互联网集市为您收集整理的算法入门—数字游戏—二进制—运算符全部内容,希望文章能够帮你解决算法入门—数字游戏—二进制—运算符所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。