㈠ c语言中八进制和16进制怎么表示
一、八进制由 0~7 八个数字组成,使用时必须以0开头(注意是数字 0,不是字母 o),例如:
//合法的八进制数
int a = 015; //换算成十进制为 13
int b = -0101; //换算成十进制为 -65
int c = 0177777; //换算成十进制为 65535
//非法的八进制
int m = 256; //无前缀 0,相当于十进制
int n = 03A2; //A不是有效的八进制数字
二、十六进制由数字 0~9、字母 A~F 或 a~f(不区分大小写)组成,使用时必须以0x或0X(不区分大小写)开头,例如:
//合法的十六进制int a = 0X2A; //换算成十进制为 42
int b = -0XA0; //换算成十进制为 -160
int c = 0xffff; //换算成十进制为 65535
//非法的十六进制
int m = 5A; //没有前缀 0X,是一个无效数字
int n = 0X3H; //H不是有效的十六进制数字
二进制化为八进制
整数部份从最低有效位开始,以3位一组,最高有效位不足3位时以0补齐,每一组均可转换成一个八进制的值,转换完毕就是八进制的整数。
小数部份从最高有效位开始,以3位一组,最低有效位不足3位时以0补齐,每一组均可转换成一个八进制的值,转换完毕就是八进制的小数。
例:(11001111.01111)2 = (011 001 111.011 110)2 = (317.36)8
以上内容参考:网络-八进制
㈡ 用C语言把十进制转换为8进制,最好用栈结构
用系统栈(递归)实现转换的函数:
系统递归函数在调用时,如果输出语句是在调用语句的后面时念搜,则输出部分是放入系统栈中的(须等到递归调用返回时,才轮到输出语句的执行)。使用递归函数的优点是程序编写简单,压栈与退栈操作由系统完成,特别适合于问题本身具有递归仔握历的特点。缺点是效率上比非递归的要差些。
#include<stdio.h>
void dec2oct(int x) //将十进制数x转化为8进制数输出
{if(x>7)dec2oct(x/8); //如果 x 不止一位8进制数,则先处理其高位部分
printf("%d",x%8); //递归返回时再输出 x 的最低位
}
int main()
{int x;
scanf("%d",&x); /皮缺/读入要转换的十进制数x
dec2oct(x); //将 x 转换为8进制数输出
return 0;
}
㈢ c语言十六进制转换为八进制
手工还是编程?
手工可以这样:把16进制数从左至右按16进制各位上的“数”代表的二进制依次写出来,比如0x9B8D7F6543D为,再从右至左每3位分开(最左端不足3位时在前面用0补齐)010,011,011,100,011,010,111,111,101,100,101,010,000,111,101。最后用八进制符号对应写出来就可以了——233432775452075。十六进制数0x9B8D7F6543D的八进制就是233432775452075!
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
#include "string.h"
void dtob(char *p,int n){
static i=0;
if(n) dtob(p,n/2);
if(n) p[i++]=n%2+'0';
}
int dtoo(char *p){
int x,i,k=strlen(p)%3;
for(x=i=0;i<k;(x*=2)+=p[i++]-'0');
for(;p[i];i+=3)
(x*=10)+=((p[i]-'0')<<2)+((p[i+1]-'0')<<1)+p[i+2]-'0';
return x;
}
void main(void){
int n;
char a[33]="";
printf("Type a hexadecimal number...\nn=0x");
scanf("%X",&n);
dtob(a,n);
printf("The binary is %s.\n",a);
printf("The octal %d.\n",dtoo(a));
}
㈣ C语言十进制怎么转换八进制,求详细描述,不要编译器运行的结果
十进制转任意进制一般都是用除基取余法,比如说102转8进制,
102除以8,商12,余6
12除以8,商1,余4
1除以8,商0,余1
商为0的时候即转换完成,将余数逆序连接起来就是结果,即10进制的102转8进制为146
将上述过程转为代码就是
#include <stdio.h>
int main()
{
int number = 102, i=0, div, rem;
int system = 8;//8进制
char s[50];
while (number) //除基取余法
{
div = number / system; //商
rem = number % system; //余
s[i++] = rem <= 9 ? rem + '0' : rem - 10 + 'A';
number = div; //上次的商赋给number
}
for (--i; i >= 0; i--)
printf("%c", s[i]);
printf("\n");
getchar();
return 0;
}
㈤ c语言十进制转换为八进制
#include<stdio.h>
void main()
{
char *p,s[6];int n;
p=s;
gets(p);
n=0;
while(*(p)!='