ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021-07-06暑假实训2下

2021-07-06 22:31:12  阅读:123  来源: 互联网

标签:十六进制 06 二进制 int 实训 printf 八进制 十进制 2021


回顾

二进制

1.1、二进制转十进制

转换规程: 从最低位开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和,例如:

二进制 1011 = 12^0 + 12^1 + 02^2 + 12^3 = 1 + 2 + 0 + 8 = 11

1.2、八制转十进制

转换规则: 从最低位开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和,例如:

八进制 0123 = 38^0 + 28^1 + 1*8^2 = 3+16+64 = 83

1.3、十六进制转十进制

转换规则: 从最低位开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和,例如:

十六进制 0x34A = 1016^0 + 416^1 + 3*16^2 = 10+64+768 = 842

2、十进制转其他进制
2.1、十进制转二进制binary

规则: 将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制,故此法叫做除商逆序取余法;

案例: 将56转换为二进制

56 :
56 / 2 = 28 余0
28 / 2 = 14 余0
14 / 2 = 7 余0
7 / 2 = 3 余1
3 / 2 = 1 余1
1 / 2 = 0余 1
故56转换为二进制的结果是:111000
代码实现:
#include <stdio.h>
//转十进制二进制
void main() {
printf(“请输入一个十进制数:”);
int binary = 0; //二进制数
int b = 1; //循环标志
int num[100] ; //用来存二进制的数组
int index = 0; //数组的下标
int count = -1; //用来计算数组的使用个数,这里使用-1是因为数组的下标是从0开始的
//所以当我们循环一次去自增的时候,第一次应该是从0开始,如果count的初始值是0的话
//就会导致使用的第一个数组的下标为1,那样会导致存数据的下标index和记录使用的下标count不一致
//使数据溢出
scanf("%d",&binary);
while (b) {
num[index] = binary % 2; //每次运算取余
binary /= 2; //每次运算二进制数需要除以2
//printf(“num[%d]=%d\n”,index,num[index]);
index++; //每循环一次数组下标就移一位
count++; //每循环一次就表示占用了数组的一个位置
if (binary == 0) {
b = 0;
}
}
printf(“占用数组位置%d个”,count+1);
printf("\n");
printf(“二进制数为:”);
for (int i = count; i >=0; i–) {
printf("%d",num[i]);
}
getchar();
getchar();//回车会被接收,所以需要两个来暂停控制台
}
2.2、十进制转八进制octonary
规则: 将该数不断除以8,直到商为0,然后将每步得到的余数倒过来,就是对应的八进制。
**案例:**将156转换为八进制
156:
156 / 8 = 19 余 4
19 / 8 = 2 余 3
2 / 8 = 0 余 2
故156转换为八进制的结果是:0234
代码实现:
#include <stdio.h>
//十进制转八进制
#define TRUE 1 //宏定义 true为1
#define FALSE 0//宏定义 false为0
void main() {
int num[100]; //定义数组用来存储转换后的八进制数
int octonary = 0; //十进制数
int b = TRUE; //循环赋值的标志
int index = 0; //存储八进制位数的下标
int count = -1; //八进制数的位数
printf(“请输入一个十进制数:”);
scanf("%d",&octonary);
while (b) {
num[index++] = octonary % 8; //获取余数
octonary /= 8; //累除
count++;
if (octonary == 0) { //当octonary为0时,表示已经除完了,除到底了,这时候只需要将所得到的的余数
b = FALSE; //倒过来就是需要求的八进制数了
}
}
printf(“占用数组位置%d个\n”,count+1);
printf(“八进制数为:”);
for (int i = count; i >= 0; i–) {
printf("%d",num[i]);
}

getchar();
getchar();

}
2.3、十进制转十六进制HEX(hexadecimal)
规则: 将该数不断除以16,直到商为0,然后将每步得到的余数倒过来,就是对应的十六进制。
案例: 将356转换成十六进制
356:
356 / 16 = 22 余 4
22 / 16 = 1 余 6
1 / 16 = 0 余 1
故356转换为十六进制的结果为0x164
代码实现:
#include <stdio.h>
#include <stdbool.h>
//十进制转换为十六进制
void main() {
int hexadecimal = 0;
printf(“请输入一个十进制数:”);
scanf("%d",&hexadecimal);
bool b = true;
int index = 0;//数组的下标
int num[100];//用来存储转换后十六进制
while (b) {
num[index++] = hexadecimal % 16;
hexadecimal /= 16;
if (hexadecimal == 0) {
b = false;
}
}
printf(“占用数组的位置%d个\n”,index);
printf(“转换后的十六进制数为:”);
for (int i = index-1; i >= 0; i–) {
printf("%d",num[i]);
}
getchar();
getchar();
}
3、二进制转其他进制
3.1、二进制转八进制
规则: 从低位开始,将二进制数每三位一组(111表示7)分组,不够的用0补充,将每一组转换成对应的八进制即可
案例: 将11010101转成八进制
11010101:对其进行三位一体分组
第一组:101 ——> 5
第二组:010 ——> 2
第三组:011 ——> 3
故,二进制11010101对应的八进制数是:0325
3.2、二进制转十六进制
规则: 从低位开始,将二进制数每四位一组(1111表示F)进行分组,转成对应的十六进制数即可
案例: 将11010101转成十六进制
11010101:对其进行四位一体分组
第一组:0101 ——> 5
第二组:1101 ——> 13
故,二进制11010101转换为十六进制数是:0xD5
4、其他进制转二进制
4.1、八进制转二进制
规则: 将八进制数的每一位,转换成对应的一个三位的二进制数即可
案例: 将0237转成二进制
0237:每一位对应三位二进制数进行拆分
第一组 7 ——> 111
第二组 3 ——> 011
第三组 2 ——> 010
故,八进制数0237转换为二进制为:10011111
4.2、十六进制转二进制
规则: 将十六进制数的每一位,转换成对应的一个四位的二进制数即可
案例: 将0X23B转换成二进制数
0x23B:每一位对应四位二进制数进行拆分
第一组 B ——> 1011
第二组 3 ——> 0011
第三组 2 ——> 0010
故,0x23B转换为二进制数为:1000111011

标签:十六进制,06,二进制,int,实训,printf,八进制,十进制,2021
来源: https://blog.csdn.net/qq_51758960/article/details/118531015

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有