按照每行两个单词输出数字的二进制就行了
其中就是负数的二进制转换可能有人不知道以-1为例
先求出-1的相反数的二进制:0000 0001->(取反)1111 1110->(加一)1111 1111(即为-1的二进制)。
其次就是得到的二进制要多打印几位(八位即可),不然很难看出来内容。
其实完全可以用c++库来解决,特别方便记录下来学习学习。
#include <iostream>
#include <bitset>
using namespace std;
int main()
{
int n, m;
while (cin >> n >> m)
{
bitset<8> s;//bitsset<8> t(n)也可以直接将t赋值为n,8是指输出8位的二进制
s = n;
cout << s.to_string();
s = m;
cout << s.to_string() << '\n';
}
return 0;
}
当然也可以自己转(写的很乱应该没有参考价值):
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string TWO(int num) {
string res, ans = "00000000";
bool flag = false;
int k = 0;
if (num < 0) {
num = -num;
flag = true;
}
do {
if (num % 2 == 0) res.push_back('0');
else res.push_back('1');
num = num >> 1;
} while (num);
reverse(res.begin(), res.end());//翻转函数将res翻转
int len1 = res.size() - 1, len2 = ans.size() - 1;
for (int i = 0; i < res.size(); i++) ans[len2 - i] = res[len1 - i];//赋给另一个字符串补8位
if (flag) {//如果是负数就取反并加一
for (int i = 0; i < ans.size(); i++) {//取反
if (ans[i] == '1') ans[i] = '0';
else ans[i] = '1';
}
ans[ans.size() - 1] += 1;//加一
for (int i = ans.size() - 1; i > 0; i--) {//进位
if (ans[i] == '2') {
ans[i] = '0';
ans[i - 1] += 1;
}
else break;
}
//if (ans[0] == '2') ans[0] = '0';
}
return ans;
}
void print(string s) {//方便观察
for (int i = 0; i < s.size(); i++) {
if (s[i] == '1') cout << s[i];
else cout << ' ';
}
}
int main() {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 16; j++) {
string s1,s2;
int num1, num2;
cin >> num1 >> num2;
s1 = TWO(num1);
//cout << s1;
print(s1);
s2 = TWO(num2);
//cout << s2 << '\n';
print(s2); cout << '\n';
}
}
return 0;
}