當前位置:首頁 » 編程語言 » 二進制轉換八進制c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

二進制轉換八進制c語言

發布時間: 2022-02-08 21:24:30

1. 關於一個二進制數轉為八進制數的c語言編程

因為你的輸入是%c,也就是字元型的『1』『0』
不是數字1,0
計算中用到的是數字,不是字元,所以需要把字元轉化為數字,ascII碼"1" 是49,「0」是48
ch - '0'
若ch = 『1』,則49-48 = 1
即轉化為數字1

2. C語言中的二進制、八進制、十進制之間的轉換

二進制的1101轉化成十進制

1101(2)=1*2^0+0*2^1+1*2^2+1*2^3=1+0+4+8=13
轉化成十進制要從右到左用二進制的每個數去乘以2的相應次方
不過次方要從0開始
十進制轉二進制:
用2輾轉相除至結果為1
將余數和最後的1從下向上倒序寫
就是結果
例如302
302/2
=
151
餘0
151/2
=
75
餘1
75/2
=
37
餘1
37/2
=
18
餘1
18/2
=
9
餘0
9/2
=
4
餘1
4/2
=
2
餘0
2/2
=
1
餘0
1/2
=
0
餘1
故二進制為100101110
二進制轉八進制
在把二進制數轉換為八進製表示形式時,對每三位二進制位進行分組,應該從小數點所在位置分別向左向右劃分,若整數部分倍數不是3的倍數,可以在最高位前面補若干個0;對小數部分,當其位數不是的倍數時,在最低位後補若干個0.然後從左到右把每組的八進制碼依次寫出,即得轉換結果.
你算一下就知道了啊
比如110=2^2+2+0=6
二進制轉十六進制
要將二進制轉為16進制,只需將二進制的位數由右向左每四位一個單位分隔,分的不夠的前邊補零,用四位數的二進制數來代表一個16進制。轉換表如下,括弧內為十六進制
0000(0)
0001
(1)
0010
(2)
0011
(3)
0100
(4)
0101
(5)
0110
(6)
0111
(7)
1000
(8)
1001
(9)
1010(A)
1011
(B)
1100
(C)
1101
(D)
1110
(E)
1111
(F)
例如:10101011劃分為1010
1011,根據轉換表十六進制為AB

3. c語言中將二進制數(001101101110.110101)b轉換成八進制數怎麼算

三位二進制對應一位8進制。
所以 以小數點分隔,然後轉換就行了
001 101 101 110.110 101
每三個對應一個
就是
1 5 5 6 . 6 5
結果就是
1556.65

4. 二進制數轉換為對應的十進制、八進制和十六進制數,C語言

#include <stdio.h>
#include <string.h>
char s[128];
int main(){
printf("Input a binary number:");
gets(s);
int len,i,n=0;
len=strlen(s);
for (i=0; i<len; i++) {
if(s[i]=='1'){
n<<=1;
n|=1;

}
else{
n<<=1;
}
}
printf("The number is %d in decimal.\n",n);
printf("The number is %o in octal.\n",n);
printf("The number is %X in octal.\n",n);
}

5. 用c語言編寫八進制轉換二進製程序

現在提供一個從2到16之間的互相轉換程序,可以實現小數,整數,負數,正數等之間的互相轉換,樓主可以根據自己的需要稍作修改即可滿足你自己的需要,O(∩_∩)O~
源程序如下:
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
void main()
{
int i,j,k,m,n,x,b[20],h[20],c,t;
double d,r,p=0;
char a[20];
printf("請輸入一個任意進制的數:");
gets(a);//在頭文件<string.h>中定義
printf("請輸入此數為何種進制的數:");
scanf("%d",&t);
printf("請輸入要轉換成的進制(1<N<=16):");
scanf("%d",&n);
m=strlen(a);//求字元串的長度
x=m;
for(k=0,j=0;k<m;k++)//主要是分段,以小數點為界限
{
if(a[k]=='.')
{
x=k;
break;
}
if(a[k]=='-')
j++;
}
for(k=x+1;k<m;k++)//修正輸入過程中可能會輸入不止一個「.」和「-」的問題
{
if(a[k]=='-')
j++;
if(j>1)//如果其中再次遇到「-」證明輸入有誤,終止程序
{
printf("ERROR!\n");
exit(0);
}
if(a[k]=='.')//如果其中再次遇到「.」證明輸入有誤,終止程序
{
printf("ERROR!\n");
exit(0);
}
}//注意:前面兩個for()循環可以合並成一個循環,這樣就可以節約很多的代碼的,但是相對而言,兩段程序的時間復雜度一樣,修改後的代碼如下:
/*
i=0;
j=0;
for(k=0;k<m;k++)
{
if(a[k]=='.')
{
i++;
x=k;
}
if(a[k]=='-')
j++;
if(i>1||j>1)
{
printf("ERROR!\n");
exit(0);
}
}*/
for(j=x-1;j>=0;j--)
{
if(a[j]=='-')//符號的處理
break;
if(a[j]=='A')
r=10;
else
if(a[j]=='B')
r=11;
else
if(a[j]=='C')
r=12;
else
if(a[j]=='D')
r=13;
else
if(a[j]=='E')
r=14;
else
if(a[j]=='F')
r=15;
else
if(a[j]<48||a[j]>57&&a[j]<65||a[j]>70)//修正程序輸入合不合法問題的判斷,此處採用ASCII值進行編輯
//if(a[j]>='G'&&a[j]<='Z'||a[j]>='a'&&a[j]<='z')//此段程序不能判斷像輸入&、%、#等字元的錯誤判斷
{
printf("ERROR!\n");
exit(0);//在頭文件<stdlib.h>中定義,無條件跳出程序的的運行
}
else
r=a[j]-'0';//將字元轉換成數字
if(r>=t)
{
printf("ERROR!\n");
exit(0);
}
p=p+r*pow((double)t,(double)(x-j-1));//計算結果
}
if(a[x]=='.')
{
for(j=x+1;j<m;j++)
{
if(a[j]=='A')
r=10;
else
if(a[j]=='B')
r=11;
else
if(a[j]=='C')
r=12;
else
if(a[j]=='D')
r=13;
else
if(a[j]=='E')
r=14;
else
if(a[j]=='F')
r=15;
else
if(a[j]<48||a[j]>57&&a[j]<65||a[j]>70)//修正程序輸入合不合法問題的判斷,此處採用ASCII值進行編輯
//if(a[j]>='G'&&a[j]<='Z'||a[j]>='a'&&a[j]<='z')//此段程序不能判斷像輸入&、%、#等字元的錯誤判斷
{
printf("ERROR!\n");
exit(0);
}
else
r=a[j]-'0';//將字元轉換成數字
if(r>=t)
{
printf("ERROR!\n");
exit(0);
}
p=p+r*pow((double)t,(double)(x-j));
}
}
if(n==10)//選擇性計算,如果是整數就不用進行這一步的計算了,這樣可以節約程序的運行時間
{
printf("轉換結果為:");
if(a[0]=='-')
{
printf("-");
}
printf("%f",p);
}
else
{
k=p;//強制類型轉換,可以使用k=(int)p;代替,從而更加的一目瞭然
i=0;
while(k)//判定需要轉換的數是否變為0
{
h[i++]=k%n;//取余,進行進制轉換,但是順序與正確值相反
k/=n;//轉換一位之後進行相應的變化
}
c=0;
//if(p!=(int)p)//選擇性計算,如果是整數就不用進行這一步的計算了,這樣可以節約程序的運行時間
//{
d=p-(int)p;//取小數部分
while(d!=0)
{
b[c]=(int)(d*n);//演算法為×N取整
d=d*n-b[c];
c++;
if(c>=10)
break;//主要是控制小數後面萬一出現無限小數的時候好跳出循環以免出現死循環
//}
}
printf("轉換結果為:");
if(a[0]=='-')
printf("-");
for(j=i-1;j>=0;j--)//反序輸出,大於10的數字進行相應的變化
{
if(h[j]==10)
printf("A");
else
if(h[j]==11)
printf("B");
else
if(h[j]==12)
printf("C");
else
if(h[j]==13)
printf("D");
else
if(h[j]==14)
printf("E");
else
if(h[j]==15)
printf("F");
else
printf("%d",h[j]);
}
if(p!=(int)p)//選擇性輸出,這樣可以節約輸出時間和程序的運行時間
{
printf(".");
for(j=0;j<c;j++)//正序輸出
{
if(b[j]==10)
printf("A");
else
if(b[j]==11)
printf("B");
else
if(b[j]==12)
printf("C");
else
if(b[j]==13)
printf("D");
else
if(b[j]==14)
printf("E");
else
if(b[j]==15)
printf("F");
else
printf("%d",b[j]);
}
}
if(c>=10)//如果是無限小數則在後以省略號表示
printf("......");
}
printf("\n");//輸出換行,以使程序的輸出結果美觀
}

6. C語言中怎麼寫二進制轉換八進制

為了方便,可以先轉成10進制

~~~~~~~~

7. c語言中的數據類型及二進制 八進制 十六進制之間的轉換

2的3次方等於8,一位八進制數正好是三位二進制;2的4次方等於16,一位十六進制數正好是四位二進制。
二進制轉換成八進制的方法:以小數點為中心,整數部分自右向左分組,小數部分自左向右分組,每三位一組,不足的補零(只有整數的高位和小數的低位才能補零)。後將各組的三位二進制按2的權展開後相加得一位八進制數值。
十六進制分組時每組四位數一組。

四位進制之間的關系
十進制 二進制 八進制 十六進制
0 0000 0 0

1 0001 1 1

2 0010 2 2

3 0011 3 3

4 0100 4 4

5 0101 5 5

6 0110 6 6

7 0111 7 7

8 1000 10 8

9 1001 11 9

10 1010 12 A

11 1011 13 B

12 1100 14 C

13 1101 15 D

14 1110 16 E

15 1111 17 F

16 10000 20 10

如(101001000011.100100)2

(101 001 000 011. 100 100)2
5 1 0 3. 4 4 =(5103.44)8
(1010 0100 0011. 1001)2
A 4 3 9 =(A43.9)16

8. c語言二進制八進制十進制16進制怎麼轉換

二進制轉換成八進制數
(1)二進制數轉換成八進制數:對於整數,從低位到高位將二進制數的每三位分為一組,若不夠三位時,在高位左面添0,補足三位,然後將每三位二進制數用一位八進制數替換,小數部分從小數點開始,自左向右每三位一組進行轉換即可完成。例如:
將二進制數1101001轉換成八進制數,則
(001 101 001)2
| | |
( 1 5 1)8
( 1101001)2=(151)8

(2)八進制數轉換成二進制數:只要將每位八進制數用三位二進制數替換,即可完成轉換,例如,把八進制數(643.503)8,轉換成二進制數,則
(6 4 3 . 5 0 3)8
| | | | | |
(110 100 011 . 101 000 011)2
(643.503)8=(110100011.101000011)2
4、二進制與十六進制之間的轉換
(1)二進制數轉換成十六進制數:由於2的4次方=16,所以依照二進制與八進制的轉換方法,將二進制數的每四位用一個十六進制數碼來表示,整數部分以小數點為界點從右往左每四位一組轉換,小數部分從小數點開始自左向右每四位一組進行轉換。
(2)十六進制轉換成二進制數
如將十六進制數轉換成二進制數,只要將每一位十六進制數用四位相應的二進制數表示,即可完成轉換。
例如:將(163.5B)16轉換成二進制數,則
( 1 6 3 . 5 B )16
| | | | |
(0001 0110 0011. 0101 1011 )2
(163.5B)16=(101100011.01011011)2

9. 關於c語言中八進制數轉二進制數的問題

你的程序我親自運行過了,去除語法錯誤和不當。比如返回值的問題。最主要的問題是*(*str + n) = (c / 2) / 2;這幾句,你貌似把一個字元ASCII碼直接當成了整形的數進行了取整和取余運算。
這肯定是錯的,如果你的目的是int和char的轉換,
最好是調用下系統函數 atoi 和 itoa進行。

10. C語言中字元串如何轉換為二進制、八進制、十進制、十六進制

什麼意思,?沒懂,,,是說轉為 2 8 16進制的整數?
只要是整數 int。就只有大小。沒有進制的區別。
所謂的進制,只是為了人為識別。
但是可以把整數,轉換為響應進制的字元串。
舉例
char num[] = "15";
int val = atoi(num); //字元串轉為整數

char tem[16] = {};
_itoa(val,tem,2);//整數轉為2進制字元串
_itoa(val,tem,8);//8進制
_itoa(val,tem,16);//16進制
_itoa(val,tem,10);