C言語による半加算器、全加算器

+1

C言語で半加算器、全加算器を書いてみました。 入力ビット列がA[]B[]、結果ビット列がS[]になります。

#include <stdio.h>
/* ANDゲート */
int and_gate(int A, int B)
{
return A && B ? 1 : 0;
}
/* ORゲート */
int or_gate(int A, int B)
{
return A || B ? 1 : 0;
}
/* NOTゲート */
int not_gate(int A)
{
return A ? 0 : 1;
}
/* XORゲート */
int xor_gate(int A, int B)
{
return A != B ? 1 : 0;
}
/* 半加算器 */
void half_adder(int A, int B, int* C, int* S)
{
*C = and_gate(A, B);
*S = xor_gate(A, B);
}
/* 全加算器 */
void full_adder(int A, int B, int X, int* C, int* S)
{
int C2;
half_adder(A, B, C, S);
half_adder(*S, X, &C2, S);
*C = or_gate(*C, C2);
}
/* 複数ビット加算器 */
void multibit_adder(int A[], int B[], int* C, int S[], int nb)
{
int i;
for (i=0; i<nb; i++) {
if (i)
full_adder(A[i], B[i], *C, C, &S[i]);
else
half_adder(A[i], B[i], C, &S[i]);
}
}
/* 複数ビット減算器 */
void multibit_subber(int A[], int B[], int* C, int S[], int nb)
{
int i;
*C = 1;
for (i=0; i<nb; i++) {
full_adder(A[i], not_gate(B[i]), *C, C, &S[i]);
}
}
int main()
{
int a[] = {0, 0, 0, 0, 0, 0, 0, 0};
int b[] = {0, 0, 0, 0, 0, 0, 0, 0};
int s[] = {0, 0, 0, 0, 0, 0, 0, 0};
int c;
multibit_subber(a, b, &c, s, 8);
printf("c= %d\ns= ", c);
for (int i=0; i<8; i++)
printf("%d ", s[i]);
puts("");
return 0;
}
view raw adder.c hosted with ❤ by GitHub

+1

「C言語による半加算器、全加算器」への1件の返信

C言語による半加算器、全加算器 その2 – dyama's page へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.