华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2261|回复: 2
打印 上一主题 下一主题

进制转换

[复制链接]

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
跳转到指定楼层
楼主
发表于 2018-7-23 20:59:03 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
1、十进制转二进制
2、二进制转十进制
3、十进制转16进制
4、十六进制转十进制
回复

使用道具 举报

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
板凳
 楼主| 发表于 2023-1-4 17:23:26 | 只看该作者
高手的进制转换(暂时不建议大家学)
1、十进制转十六进制,巧妙的利用了cout里面的hex格式,八进制可以使用oct
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int x;
  4. int main()
  5. {
  6.         cin>>x;
  7.         cout<<hex<<x;
  8.         return 0;
  9. }
复制代码

2、二进制有点特殊,没有oct和hex的表达方式,但是有个非常有意思的东西家叫做bitset
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int x;
  4. int main()
  5. {
  6.         cin>>x;
  7.         bitset<32> set(x); //定义一个32位的bitset,让它的值和x相等
  8.         cout<<set<<endl;
  9.         return 0;
  10. }
复制代码


3、十六进制转十进制,就干脆使用cin>>hex>>x,把x按十六进制读进来,然后输出
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int x;
  4. int main()
  5. {
  6.         cin>>hex>>x;
  7.         cout<<x<<endl;
  8.         return 0;
  9. }
复制代码

4、二进制转十进制的话也可以使用bitset读入二进制数
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int main()
  4. {
  5.         bitset<16> x; //定义16位的bitset
  6.         cin>>x;//按2进制的形式读入
  7.         int y= x.to_ulong();//转成十进制数
  8.         cout<<y<<endl;
  9.         return 0;
  10. }
复制代码
回复 支持 反对

使用道具 举报

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
沙发
 楼主| 发表于 2018-7-23 20:59:28 | 只看该作者
十进制转十六进制  就是把这个数字不停地去除以16,直到为0为止,除的余数要进行处理,<=9 的话输出对应的数字,>=10的话得输出ABCDEF
  1. #include <iostream>
  2. using namespace std;
  3. int i,x,k;
  4. string s;
  5. int main()
  6. {
  7.     cin>>x;
  8.     while (x>0)
  9.     {
  10.         k=x%16;
  11.         x=x/16;
  12.         if (k<=9) s=char('0'+k)+s;
  13.         else s=char('A'+k-10)+s;
  14.     }
  15.     cout<<s;
  16.     return 0;
  17. }
复制代码
十六转10 的话就是把每一位摘下来处理,这里要注意秦九昭算法。
  1. #include <iostream>
  2. using namespace std;
  3. int i,x,k,l;
  4. string s;
  5. int main()
  6. {
  7.     cin>>s;
  8.     x=0;
  9.     l=s.size();
  10.     for (i=0; i<=l-1; i++)
  11.     {
  12.         if (s[i]<='9') k=s[i]-'0';
  13.         else k=s[i]-'A'+10;
  14.         x=x*16+k;
  15.     }
  16.     cout<<x;
  17.     return 0;
  18. }
复制代码




回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-12-25 14:04 , Processed in 0.181171 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表