C語言通過邏輯運算(與或非)實現加法
1.加法器:首先看看下面的內容,瞭解一下什麼是加法器
本部分摘自:http://jpkc.nwpu.edu.cn/dzjc/diangongdz/wangluokecheng/dianzijishu/chapter6/6-6.html加法器是計算機中最基本的運算單元電路,任何複雜的加法器電路中,最基本的單元都是半加器和全加器。
(1)半加器
半加器只能對一位二進位制數作算術加運算,可向高位進位,但不能輸入低位的進位值。 半加器的邏輯狀態表如表6.5.1。
表6.5.1 半加器的邏輯狀態表 | |||
A |
B |
S |
C |
0 |
0 |
0 |
0 |
圖6.5.1(a)為用異或門和與門構成的半加器邏輯狀態圖,圖6.5.1(b)為半加器的邏輯符號。
圖6.5.1 半加器 |
表6.5.2是全加器的邏輯狀態表,Ai、Bi為本位的加數和被加數,Ci-1表示從低位輸入的進位數,Si是本位的和數,Ci為本位輸出到高位的進位數。
表6.5.2 全加器的邏輯狀態表 | ||||
0 |
0 |
0 |
0 |
0 |
為了利用輸出Si,將Ci作適當變換
令,則是的半加和,而Si又是與的半加和,因此可以把一個全加器用兩個半加器和一個或門實現,如圖6.5.3(a),圖6.5.3(b)是全加器的邏輯符號。
圖6.5.3 全加器
2.程式碼
利用上面的公式,可以得到以下程式碼(可加可減,可正可負,因為負數就是補碼,用負數就是減法了)。至於效率,其實都是你懂的,就是看著好玩……
其實上面的程式碼還是用到了加法,i++,不過這裡保留著的目的是為了做看著舒服一點,而且如果是用來做較大數字加法也容易修改。強迫症犯了可以改成這樣int func(int x, int y) { int a, b , c, s; int tmp, flag; s = c = tmp = 0; flag = 1; for(int i = 0; i < 32 ; i++) { a = x & flag; b = y & flag; s = a ^ b ^ c; c = (a & b)<< 1; tmp |= s; flag <<= 1; } return tmp; }
int func(int x, int y)
{
int a, b , c, s;
int tmp, flag;
s = c = tmp = 0;
flag = 1;
while(1){
a = x & flag;
b = y & flag;
s = a ^ b ^ c;
c = (a & b)<< 1;
tmp |= s;
if(flag & 0x80000000 == 0x80000000)
break;
flag <<= 1;
}
return tmp;
}
相關推薦
C語言通過邏輯運算(與或非)實現加法
1.加法器:首先看看下面的內容,瞭解一下什麼是加法器 本部分摘自:http://jpkc.nwpu.edu.cn/dzjc/diangongdz/wangluokecheng/dianzijishu/
C語言指標的運算(指標加或減一個整數的意義)
指標可以加上或減去一個整數。指標的這種運算的意義和通常的數值的加減運算的意義是不一樣的,以單元為單位。例一:#include<stdio.h> int main() { char a[]="0123456789"; int *ptr = (i
1014 C語言程序設計教程(第三版)課後習題6.4
content += 教程 print ons ont c語言程序設計 lld cnblogs 題目描述 求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一個數字。 輸入 n 輸出 和 樣例輸入 5 樣例輸出 153 1 #include "stdio.h"
1013: C語言程序設計教程(第三版)課後習題6.3
其中a是一個數字 blog += color turn sam c語言程序 [] c語言 題目描述 求Sn=a+aa+aaa+…+aa…aaa(有n個a)之值,其中a是一個數字。 例如:2+22+222+2222+22222(n=5),n由鍵盤輸入。 輸入 a 輸出 和 樣
1024: C語言程序設計教程(第三版)課後習題7.3
c語言程序 print clas 程序 scanf col class pri printf 題目描述 求一個3×3矩陣對角線元素之和。 輸入 矩陣 輸出 主對角線 副對角線 元素和 樣例輸入 1 2 3 1 1 1 3 2 1 樣例輸出 3 7 1 #include
1046: C語言程序設計教程(第三版)課後習題10.4
con n) 順序 調整 style char ++ 輸入數據 include 題目描述 有n個整數,使前面各數順序向後移m個位置,最後m個數變成前面m個數,見圖。寫一函數:實現以上功能,在主函數中輸入n個數和輸出調整後的n個數。 輸入 輸入數據的個數n n個整數 移動的位
C語言的那些事兒 (迴圈結構程式設計)
1.迴圈語句初認識:在不少實際問題中有許多具有規律性的重複操作,因此在程式中就需要重複執行某些語句。一組被重複執行的語句稱之為迴圈體,能否繼續重複,決定迴圈的終止條件。迴圈結構是在一定條件下反覆執行某段程式的流程結構,被反覆執行的程式被稱為迴圈體。迴圈語句是由迴圈體及迴圈的終止條件兩部
C語言操作mysql範例(增刪查改)
C程式碼的API是隨MySQL一起釋出的. 它包含在mysqlclient庫中, 可以使C程式來訪問資料庫. MySQL原始碼包中的許多客戶端都是用C寫的. 如果你正在找使用這些C API的例子, 可以看看客戶端的寫法.你可以在MySQL原始碼包的clie
C語言常用庫函式(含詳細用法)
一、數學函式 呼叫數學函式時,要求在原始檔中包下以下命令列: #include <math.h> 函式原型說明 功能 返回值 說明 int abs( int x) 求整數x的絕對值 計算結果 double fabs(double
史上最詳細c語言學生管理系統(完整的原始碼)
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> struct student { char sno[12]; char n
純C語言學生管理系統(學生期末作業)
** 純C語言學生管理系統(學生期末作業) ** 分為7大功能:增、刪、查、改、預覽、儲存、匯出 程式碼都加有註釋,利於不懂的,理解 新增功能 //新增學生 void input () { int i; int j,ge; DaoChu(); printf("
DOS命令 的條件判斷(與或非:and、or 、not)
DOS 命令實在是太弱,太難用了,基本的邏輯判斷寫起來都很費勁。一般的與或非如何解決呢? 1、非 這個有現成的,條件判斷前加not,例如: C:\Users\HW>if 1==1 echo Ok Ok C:\Users\HW>if not 1==1 echo
C語言和設計模式(享元模式)
【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 享元模式看上去有點玄乎,但是其實也沒有那麼複雜。我們還是用示例說話。比如說,大家在使用電腦的使用應該少不了使用WORD軟體。使用WORD呢, 那就少不了設定模板。
C語言實驗——圖形輸出(字元常量練習)
Time Limit: 1000MS Memory Limit: 65536KB Problem Description 用基本輸出語句列印以下圖形: # ## ### #### ##### ###### Input 本題目沒有輸入資料 Output 輸出圖形由6行組成,第
c#語言-------------型別轉換2(裡式轉換)
一、裡式轉換(在C#中一切類都直接或間接繼承與Object類) 1、子類可以賦值給父類:實質如果一個地方需要一個父類做為引數,我們可以給一個子類代替(一個方法中需要傳進一個子類的物件,子類做實參,我們可以讓父類作為形參接收子類的物件) 2、如果父類中裝的是子類的物件,那麼
C語言- 儲存類說明符(storage class specifier):typedef
1) 定義一個新的結構型別 1 2 3 4 5 6 7 8 9 10 struct tagMyStruct { int iNum; long lLength;
C語言二維陣列(第十天)
二維陣列: 二維陣列可以看成是多個數組組成的一個數組 比如: int arr[2][3]={{1,2,3},{4,5,6}};int 和一維陣列一樣 代表的的陣列的型別 arr和一維陣列一樣 是這個陣列陣列的名字 和一維陣列不同的是 二維陣列有兩個中括號 賦值也不同 其中的
C語言和設計模式(觀察者模式)
【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 觀察者模式可能是我們在軟體開發中使用得比較多的一種設計模式。為什麼這麼說?大家可以聽我一一到來。我們知道,在windows的軟體中,所有的界都是由視窗構成的。對話
C語言中的整數(short,int,long)
整數是程式設計中常用的一種資料,C語言中有三種整數型別,分別為 short、int 和 long。int 稱為整型,short 稱為短整型,long 稱為長整型,它們的長度(所佔位元組數)關係為: short <= int <= long 它們具體佔用幾個位元
C語言 通過遞迴 、_findfirst、_findnext函式實現 搜尋指定目錄的指定檔案
主要使用:_findfirst、_findnext函式OperateFile.c#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h