C29-8.20进制转换
原题链接:38471.note12025-08-20 18:07:13
发布于:江苏
一、按位左移右移
#include <iostream>
using namespace std;
int main(){
int n = 1;
//左移n位相当于将原来的数放大 2^n倍
for (int i=1; i<=20; i++){
cout << n << " ";
n <<= 1; //n = n << 1;
}
cout << endl;
//左移n位相当于将原来的数缩小 2^n倍
for (int i=1; i<=30; i++){
cout << n << ' ';
n >>= 1;
}
return 0;
}
/*
二进制: Binary
八进制: Octal
十进制: Decimal
十六进制: Hexadecimal
按位与
按位或
按位异或
按位取反
*/
二、进制转换
1. 二进制转十进制(string)
#include <bits/stdc++.h>
using namespace std;
int main(){
string s;
cin >> s;
int sum = 0, k = 1;
for(int i=s.size()-1; i>=0; i--){
if (s[i] == '1') sum += k;
k *= 2;
}
cout << sum;
return 0;
}
2. 二进制转十进制(pow)
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin >> s;
int len = s.size();
int k = 0, ans = 0;
for(int i=len-1; i>=0; i--) {
ans += (s[i] - 48) * pow(2, k);
k++;
}
cout << ans;
return 0;
}
3. 十进制转二进制(string)
本质上还是短除法
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n; //将十进制的n转换为 二进制
string s="";
while (n) {
if(n%2 == 1) s = "1" + s;
else s = "0" + s;
n /= 2;
}
cout << s;
return 0;
}
4. 十进制转十六进制(数组)
本质上还是短除法, 需要注意的是超过9的数字需要结合ascii处理一下.
#include <iostream>
using namespace std;
int a[1005];
int main(){
int n, i = 1;
cin >> n;
while (n){
a[i] = n%16;
n /= 16;
i++;
}
for (--i; i>=1; i--) {
if (a[i]>9) cout << (char)(a[i]+55);
else cout << a[i];
}
return 0;
}
这里空空如也
有帮助,赞一个