十进制转二进制,八进制,十六进制

2024-05-01 19:28

本文主要是介绍十进制转二进制,八进制,十六进制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

输入一个十进制的数,怎样能转化为二进制,八进制,十六进制呢?

首先我们要知道它的原理:

十进制转K进制

整数部分:十进制整数转化为K进制整数的方法是倒除法,即除K直至商为0,倒取余数。

例:172(10)=10101100(2)

注:

小数部分:十进制小数转换为K进制小数的方法是取整法,即小数部分循环乘K直至为0,顺序取整数部分。

例:0.625(10)=0.101(2)

0.625*2=1.25-------取出整数部分1

0.25*2=0.5----------取出整数部分0

0.5*2=1.0------------取出整数部分1

然后我又去查了C知道,C知道是这样回答的:

在C++中,将一个十进制数转换为二进制数可以使用位运算和循环来实现。下面是一个示例代码:

#include <iostream>
using namespace std;void decimalToBinary(int decimal) {int binary[32]; // 用于存储二进制数的数组int index = 0; // 数组索引// 将十进制数转换为二进制数while (decimal > 0) {binary[index] = decimal % 2;decimal = decimal / 2;index++;}// 输出二进制数(逆序输出)cout << "转换后的二进制数为:";for (int i = index - 1; i >= 0; i--) {cout << binary[i];}
}int main() {int decimal;cout << "请输入一个十进制数:";cin >> decimal;decimalToBinary(decimal);return 0;
}

运行以上代码,程序会要求你输入一个十进制数,然后将其转换为二进制数并输出。

那么,简化后就是:

#include<bits/stdc++.h>
using namespace std;
void h2(int x){int s[32];int n=0;while(x>0){s[n]=x%2;x=x/2;n++;}cout<<"转换后的二(B)进制数为:";for(int i=n-1;i>=0;i--){cout<<s[i];}
}
int main(){int x;cout<<"请输入一个十进制数:";cin>>x;h2(x);return 0;
}

我们要不断的将要转化的数除以2,记录它的余数,并倒序输出

八进制也是相同,只需把除的数变成八就行了:

#include<bits/stdc++.h>
using namespace std;
void h8(int x){int s[32];int n=0;while(x>0){s[n]=x%8;x=x/8;n++;}cout<<"转换后的八(O)进制数为:";for(int i=n-1;i>=0;i--){cout<<s[i];}
}
int main(){int x;cout<<"请输入一个十进制数:";cin>>x;h8(x);return 0;
}

转十六进制呢,我又去查了C知道,C知道是这样回答的:

在C++中,可以使用以下几种方法将整数转换为16进制表示: 

  1. 使用std::hex和std::cout:
    int num = 255;
    std::cout << std::hex << num;

    这将输出255的16进制表示:ff。

  2. 使用std::stringstream:
    #include <iostream>
    #include <sstream>int main() {int num = 255;std::stringstream ss;ss << std::hex << num;std::string hexStr = ss.str();std::cout << hexStr;return 0;
    }

    这将输出255的16进制表示:ff。

  3. 使用sprintf函数:
    #include <iostream>
    #include <cstdio>int main() {int num = 255;char hexStr[10];sprintf(hexStr, "%x", num);std::cout << hexStr;return 0;
    }

    这将输出255的16进制表示:ff。

  4. 使用std::bitset:
    #include <iostream>
    #include <bitset>int main() {int num = 255;std::bitset<8> binary(num);std::cout << std::hex << binary.to_ulong();return 0;
    }

    这将输出255的16进制表示:ff。

反正我是看不懂,我就用第一种,大家可以随意替换

最后代码:

#include<bits/stdc++.h>
using namespace std;
void h2(int x){int s[32];int n=0;while(x>0){s[n]=x%2;x=x/2;n++;}cout<<"转换后的二(B)进制数为:";for(int i=n-1;i>=0;i--){cout<<s[i];}
}
void h8(int x){int s[32];int n=0;while(x>0){s[n]=x%8;x=x/8;n++;}cout<<"转换后的八(O)进制数为:";for(int i=n-1;i>=0;i--){cout<<s[i];}
}
void h16(int x){cout<<"转换后的十六(H)进制数为:";std::cout<<std::hex<<x;
}
int main(){int x;cout<<"请输入一个十进制数:";cin>>x;h2(x);cout<<endl;h8(x);cout<<endl;h16(x);return 0;
}

这篇关于十进制转二进制,八进制,十六进制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/952489

相关文章

通信工程学习:什么是2ASK/BASK二进制振幅键控

2ASK/BASK:二进制振幅键控         2ASK/BASK二进制振幅键控是一种数字调制技术,其全称是二进制振幅键控(Binary Amplitude Shift Keying)。该技术通过改变载波的振幅来传递二进制数字信息,而载波的频率和相位则保持不变。以下是关于2ASK/BASK二进制振幅键控的详细解释: 一、2ASK/BASK二进制振幅键控的基本原理 1、振幅键控:

1 模拟——67. 二进制求和

1 模拟 67. 二进制求和 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 示例 1:输入:a = "11", b = "1"输出:"100"示例 2:输入:a = "1010", b = "1011"输出:"10101" 算法设计 可以从低位到高位(从后向前)计算,用一个变量carry记录进位,如果有字符没处理完或者有进位,则循环处理。两个字符串对

Leetcode67---二进制求和

https://leetcode.cn/problems/add-binary/description/ 给出的两个二进制,我们可以从最后开始往前运算。 给当前短的一位前面补充0即可。 class Solution {public String addBinary(String a, String b) {//给的就是二进制字符串 最后一位开始遍历 如果没有就补充0?StringBuil

二进制的匹配问题

最近做了点搜索和背包的题目,发现这个二进制的匹配很是好用,所以写一篇二进制的匹配来作为自我总结; 首先我们要知道二进制的运算符,和他们的运算规则; ABA&BA|BA^B00000010111001111110 运算符有三种‘&’ , ‘|’ ,  ‘^'  或,且,异或,运算的规则在表中可以看到,想想这个规则我们可以做很多事情! 首先,每个十进制的数都会对应一个唯一的二进

二进制方式安装Helm

二进制方式安装Helm 官网:https://helm.sh/ 1、下载安装包 wget -L https://get.helm.sh/helm-v3.16.0-rc.1-linux-amd64.tar.gz 2、解压 tar -xf helm-v3.16.0-rc.1-linux-amd64.tar.gz 3、移动到/usr/local/bin/目录下 mv linux-am

输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n。

/*** 输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n。* 思路:第一步求这两个数的异或,第二步统计异或结果中1的位数*@author: Administrator*@date: 2017-1-13 下午09:39:25*/import java.util.Scanner;public class Solution4 {public int CountDifference

牛客网《剑指Offer》 二进制中1的个数

题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路 负数用补码,其实就是求一个数据在计算机中是存储是怎么样子的。用位运算,就能很好实现。 class Solution {public:int NumberOf1(int n) {int count = 0;int flag = 1;while (flag != 0) {if ((n & f

Java 二进制,八进制,十进制,十六进制之间的相互转换

package com.sjd.JinzhiZhuanhuan;public class JinzhiZhuanhuan {//二进制转八,十,十六进制---开始public void fromBinaryToOctalSting(String str1) {String result=Integer.toOctalString(Integer.parseInt(str1, 2));System.

Excel中实现十六进制数转换为有符号十进制的方法

在计算机中,通常HEX代表16进制数,DEC代表10进制数,OCT代表8进制数 在Excel或Matlab等软件中,常用XX2XX的表达式进行进制转换,接下来主要展示16进制转换为10进制的操作 16进制转10进制:无符号    直接调用HEX2DEC 16进制转10进制:有符号   需要根据进制转换的原理,进行小小的修改 以FA46为例,若是无符号的数,则范围为: 0—65535 ,

JAX-WS - 二进制处理之MTOM(文件上传)

一、一般模式     服务端: import javax.jws.WebService;@WebServicepublic interface UploadService {public void upload(byte[] file);} import java.io.File;import java.io.FileOutputStream;import java.io.IOEx