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

c語言二進制相加

發布時間: 2022-05-18 21:54:13

『壹』 c語言如何實現二進制相加問題

用數組來做就是了,byte數組或bit數組,先將數模2運算得到各位的值,存入數組中,之後一個循環來做二進制加減法就成了,溢出的判斷也很簡單,根據兩個運算數的模與他們的符號,還有所進行的運算,用幾個if語句就解決了

『貳』 C語言二進制加法

其實不難的。除非玩單片機,否則一開始沒必要學二進制計算,遇到的時候了解一下即可。

『叄』 C語言中的二進制、十進制、十六進制各是什麼意思

計算機中常用的數的進制主要有:二進制、八進制、十六進制,學習計算機要對其有所了解。
2進制,用兩個阿拉伯數字:0、1;
8進制,用八個阿拉伯數字:0、1、2、3、4、5、6、7;
10進制,用十個阿拉伯數字:0到9;
16進制就是逢16進1,但我們只有0~9這十個數字,所以我們用A,B,C,D,E,F這五個字母來分別表示10,11,12,13,14,15。字母不區分大小寫。

以下簡介各種進制之間的轉換方法:
一、二進制轉換十進制
例:二進制 「1101100」
1101100 ←二進制數
6543210 ←排位方法

例如二進制換算十進制的演算法:
1*26 + 1*25 + 0*24 + 1*23 + 1* 22 + 0*21 + 0*20
↑ ↑
說明:2代表進制,後面的數是次方(從右往左數,以0開始)
=64+32+0+8+4+0+0
=108

二、二進制換算八進制
例:二進制的「10110111011」
換八進制時,從右到左,三位一組,不夠補0,即成了:
010 110 111 011
然後每組中的3個數分別對應4、2、1的狀態,然後將為狀態為1的相加,如:
010 = 2
110 = 4+2 = 6
111 = 4+2+1 = 7
011 = 2+1 = 3
結果為:2673

三、二進制轉換十六進制
十六進制換二進制的方法也類似,只要每組4位,分別對應8、4、2、1就行了,如分解為:
0101 1011 1011
運算為:
0101 = 4+1 = 5
1011 = 8+2+1 = 11(由於10為A,所以11即B)
1011 = 8+2+1 = 11(由於10為A,所以11即B)
結果為:5BB

四、二進制數轉換為十進制數
二進制數第0位的權值是2的0次方,第1位的權值是2的1次方……
所以,設有一個二進制數:0110 0100,轉換為10進制為:
計算: 0 * 20 + 0 * 21 + 1 * 22 + 0 * 23 + 0 * 24 + 1 * 25 + 1 * 26 + 0 * 27 = 100

五、八進制數轉換為十進制數
八進制就是逢8進1。
八進制數採用 0~7這八數來表達一個數。
八進制數第0位的權值為8的0次方,第1位權值為8的1次方,第2位權值為8的2次方……
所以,設有一個八進制數:1507,轉換為十進制為:
計算: 7 * 80 + 0 * 81 + 5 * 82 + 1 * 83 = 839
結果是,八進制數 1507 轉換成十進制數為 839

六、十六進制轉換十進制
例:2AF5換算成10進制
直接計算就是: 5 * 160 + F * 161 + A * 162 + 2 * 163 = 10997
(別忘了,在上面的計算中,A表示10,而F表示15)、

現在可以看出,所有進制換算成10進制,關鍵在於各自的權值不同。
假設有人問你,十進數 1234 為什麼是 一千二百三十四?你盡可以給他這么一個算式: 1234 = 1 * 103 + 2 * 102 + 3 * 101 + 4 * 100

十進制與二進制轉換之相互演算法
十進制轉二進制:

用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

故二進制為100101110

二進制轉十進制

從最後一位開始算,依次列為第0、1、2...位

第n位的數(0或1)乘以2的n次方

得到的結果相加就是答案

例如:01101011.轉十進制:

第0位:1乘2的0次方=1

1乘2的1次方=2

0乘2的2次方=0

1乘2的3次方=8

0乘2的4次方=0

1乘2的5次方=32

1乘2的6次方=64

0乘2的7次方=0

然後:1+2+0

+8+0+32+64+0=107.

二進制01101011=十進制107.

一、二進制數轉換成十進制數

由二進制數轉換成十進制數的基本做法是,把二進制數首先寫成加權系數展開式,然後按十進制加法規則求和。這種做法稱為"按權相加"法。

二、十進制數轉換為二進制數

十進制數轉換為二進制數時,由於整數和小數的轉換方法不同,所以先將十進制數的整數部分和小數部分分別轉換後,再加以合並。

1. 十進制整數轉換為二進制整數

十進制整數轉換為二進制整數採用"除2取余,逆序排列"法。具體做法是:用2去除十進制整數,可以得到一個商和余數;再用2去除商,又會得到一個商和余數,如此進行,直到商為零時為止,然後把先得到的余數作為二進制數的低位有效位,後得到的余數作為二進制數的高位有效位,依次排列起來。

2.十進制小數轉換為二進制小數

十進制小數轉換成二進制小數採用"乘2取整,順序排列"法。具體做法是:用2乘十進制小數,可以得到積,將積的整數部分取出,再用2乘餘下的小數部分,又得到一個積,再將積的整數部分取出,如此進行,直到積中的小數部分為零,或者達到所要求的精度為止。

然後把取出的整數部分按順序排列起來,先取的整數作為二進制小數的高位有效位,後取的整數作為低位有效位。

1.二進制與十進制的轉換

(1)二進制轉十進制<BR>方法:"按權展開求和"

例:

(1011.01)2 =(1×23+0×22+1×21+1×20+0×2-1+1×2-2)10

=(8+0+2+1+0+0.25)10

=(11.25)10

(2)十進制轉二進制

· 十進制整數轉二進制數:"除以2取余,逆序輸出"

例: (89)10=(1011001)2

2 89

2 44 …… 1

2 22 …… 0

2 11 …… 0

2 5 …… 1

2 2 …… 1

2 1 …… 0

0 …… 1

· 十進制小數轉二進制數:"乘以2取整,順序輸出"

例:

(0.625)10= (0.101)2

0.625

X 2

1.25

X 2

0.5

X 2

1.0

2.八進制與二進制的轉換

例:將八進制的37.416轉換成二進制數:

37 . 4 1 6

011 111 .100 001 110

即:(37.416)8 =(11111.10000111)2

例:將二進制的10110.0011 轉換成八進制:

0 1 0 1 1 0 . 0 0 1 1 0 0

2 6 . 1 4

即:(10110.011)2 =(26.14)8

3.十六進制與二進制的轉換<BR>例:將十六進制數5DF.9 轉換成二進制:

5 D F . 9

0101 1101 1111.1001

即:(5DF.9)16 =(10111011111.1001)2

例:將二進制數1100001.111 轉換成十六進制:

0110 0001 . 1110

6 1 . E

即:(1100001.111)2 =(61.E)16

『肆』 C語言二進制里邊"加法"和"按位與"有啥區別

||就是邏輯或,兩個事件或(當如加法1+0=1),&&邏輯與,兩個事件與(當如乘法1*0=0;只有1*1=1);|按位或(就數據每一位連加,只要有一位不是零,就不是零);&按位與(就當如每位相乘後在相加,只有對應相互不是零才不是零)

『伍』 用c語言編寫:將二個二進制數相加

僅供參考

『陸』 我想用c語言寫一個二進制數加一個二進制數,輸出的答案仍然是二進制數的程序……

//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
#include"string.h"
intmain(void){
chara[34],b[34],i,j,*ps,*pl;
printf("Input2binarynumbers(No01end)... ");
while(*a=*b='0',scanf("%[01]%[01]",a+1,b+1)>0){
(strlen(a+1)>=strlen(b+1))?(pl=a,ps=b):(pl=b,ps=a);
printf("%s+%s=",a+1,b+1);
for(i=strlen(pl+1),j=strlen(ps+1);j>0;j--,i--)
if((pl[i]+=ps[j]-'0')>'1')
pl[i]-=2,pl[i-1]++;
for(;i>0;i--)
if(pl[i]>'1')
pl[i]-=1,pl[i-1]++;
elsebreak;
printf("%s ",*pl!='0'?pl:pl+1);
}
return0;
}

『柒』 C語言,利用函數實現將二進制數轉化為十進制數並實現相加。

1、2進制10進制的轉換方法:
二進制數1101轉十進制:
1×2的三次冪+1×2的二次冪+0×2的一次冪+1×2的零次冪=8+4+0+1=13
附加一個八進制轉十進制的例子吧:
507(八進制轉10進制):
5×8的2次冪+0×8的1次冪+7×8的0次冪=
5×64+0×8+7×1=327(10進制)

2、常式:

#include"stdio.h"
doubleBtoD(charB[])
{
doubled=0;//轉為十進制數的中間結果變數
inti=0;//當前求到了二進制數的位置
while(B[i++]!='')//當沒有到二進制數結束時,一直循環
{
d=d*2+B[i-1]-'0';//求出每個二進制位的位權(從高位到低位,所以每求一位,先前的都應變為原來的2倍),累加到中間結果
}
returnd;//返回最終結果
}
intmain()
{
charb1[20],b2[20];//定義兩個二進制數字元串
scanf("%s%s",b1,b2);//輸入兩個字元串
printf("%.0lf",BtoD(b1)+BtoD(b2));//輸出兩個二進制數轉為十進制數後的和
}

『捌』 二進制加法C語言實現 debug

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>

#defineIntialStringLength30
#definetoSTR(x)_toSTR(x)
#define_toSTR(x)#x
#defineIntMax(x,y)((x)>=(y)?(x):(y))
#defineClearStdin()while(getchar()!=' ')continue;

staticchar*addBinary(constchar*a,constchar*b);

intmain(intargc,char*argv[])
{
chara[IntialStringLength+1],b[IntialStringLength+1];
printf("Inputa:");
scanf("%"toSTR(IntialStringLength)"s",a);ClearStdin();
printf("Inputb:");
scanf("%"toSTR(IntialStringLength)"s",b);ClearStdin();
char*result;//沒必要分配result空間
if((result=addBinary(a,b))!=NULL)
{
printf("Result:%s ",result);
free(result);
}
return0;
}

staticchar*addBinary(constchar*a,constchar*b){
longn=strlen(a)-1,m=strlen(b)-1;
intc=0,d,e;
char*sum;
if((sum=malloc(IntMax(n,m)+2))!=NULL)
{
//calloc和賦值''沒必要
char*result;
if((result=malloc(IntMax(n,m)+2))!=NULL)
{
for(e=0;n>=0||m>=0||c>0;n--,m--,e++)//判斷條件你看一下,原來那個逗號有問題
{
d=(n>=0?((void)assert(a[n]=='0'||a[n]=='1'),a[n]):'0')-'0'
+(m>=0?((void)assert(b[m]=='0'||b[m]=='1'),b[m]):'0')-'0'
+c;//d轉化為值
c=d/2;//c是進位值
sum[e]=d%2+'0';
}
sum[e]='';

/*下面這部分和你的不同,其實就是把sum字元串反轉一下*/

longstringLengthOfSum=strlen(sum);
for(size_tindex=0;index<stringLengthOfSum;index++)
result[index]=sum[stringLengthOfSum-1-index];
result[stringLengthOfSum]='';

free(sum);
returnresult;
}
free(sum);
}
returnNULL;
}

『玖』 c語言中的二進制,八進制,十進制,十六進制都怎麼算……,可否舉例,謝

先講一下,二進制與十進制。
以10為例,過程如圖。

10進制轉化為二進制
10÷2=5....0(余數為0)
5÷2=2....1(余數為1)
2÷2=1....0
1÷2=0....1

然後,非常重要的一步,將余數倒序相加
即:1010

這里特地說明一下,當被除數比除數小時,余數永遠為它自己。
如:8÷10 余數為8


二進制轉化為十進制

1010
從 右 算起分別對應 :
1 2 4 8
也就是 2的1次方,2次方,3次方
第三步,小數部分怎麼計算呢
如10.1

很簡單,將0.1乘以2
在乘到整數之前,將結果的整數取出。
如:
0.1x2=0.2.....0
0.2x2=0.4.....0
0.4x2=0.8......0
0.8x2=1.6......1
正序排下來: 0001
至於八進制和十六進制,其實是一樣的方法。就是把2換成8。


順便說一下,如果你是要做開發而不是考試的話可以直接用win系統自帶的計算器,選擇「程序員」 模式可以直接得到2.8.10.16進制的所有結果。