異或演算法器
A. 幫我異或運算,再說明是怎麼算出來的。
異或的規則是:按位運算,同為0,異為1
3E的二進制0111110
6E的二進制1101110
兩者異或
1010000,
即十六進制的50
22的二進制0100010
6E的二進制1101110
兩者異或
1001100,
即十六進制的4C
也可以用附件中的計算器,選擇科學型,使用其中的Xor運算功能。
B. 如何用代碼編寫一個神經網路異或運算器
配置環境、安裝合適的庫、下載數據集……有時候學習深度學習的前期工作很讓人沮喪,如果只是為了試試現在人人都談的深度學習,做這些麻煩事似乎很不值當。但好在我們也有一些更簡單的方法可以體驗深度學習。近日,編程學習平台 Scrimba 聯合創始人 Per Harald Borgen 在 Medium 上發文介紹了一種僅用30行 javaScript 代碼就創建出了一個神經網路的教程,而且使用的工具也只有 Node.js、Synaptic.js 和瀏覽器而已。另外,作者還做了一個互動式 Scrimba 教程,也許能幫你理解其中的復雜概念。
Synaptic.js:http://synaptic.juancazala.com
Node.js:http://nodejs.org
Scrimba 教程:http://scrimba.com/casts/cast-1980
Synaptic.js 讓你可以使用 Node.js 和瀏覽器做深度學習。在這篇文章中,我將介紹如何使用 Synaptic.js 創建和訓練神經網路。
//創建網路const { Layer, Network }= window.synaptic;var inputLayer = new Layer(2);var hiddenLayer = new Layer(3);var outputLayer = new Layer(1);
inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);var myNetwork = new Network({
input: inputLayer,
hidden:[hiddenLayer],
output: outputLayer
});//訓練網路——學習異或運算var learningRate =.3;for (var i =0; i <20000; i++)
{//0,0=>0
myNetwork.activate([0,0]);
myNetwork.propagate(learningRate,[0]);//0,1=>1
myNetwork.activate([0,1]);
myNetwork.propagate(learningRate,[1]);//1,0=>1
myNetwork.activate([1,0]);
myNetwork.propagate(learningRate,[1]);//1,1=>0
myNetwork.activate([1,1]);
myNetwork.propagate(learningRate,[0]);
}//測試網路console.log(myNetwork.activate([0,0]));//[0.0]console.log(myNetwork.activate([0,1]));//[0.]console.log(myNetwork.activate([1,0]));//[0.]console.log(myNetwork.activate([1,1]));//[0.0]
我們將創建一個最簡單的神經網路:一個可以執行異或運算的網路。上面就是這個網路的全部代碼,但在我們深入解讀這些代碼之前,首先我們先了解一下神經網路的基礎知識。
神經元和突觸
神經網路的基本構造模塊是神經元。神經元就像是一個函數,有幾個輸入,然後可以得到一個輸出。神經元的種類有很多。我們的網路將使用 sigmoid 神經元,它可以輸入任何數字並將其壓縮到0 到1 之間。下圖就是一個 sigmoid 神經元。它的輸入是5,輸出是1。箭頭被稱為突觸,可以將該神經元與網路中的其它層連接到一起。
現在訓練這個網路:
// train the network - learn XORvar learningRate =.3;for (var i =0; i <20000; i++){ //0,0=>0
myNetwork.activate([0,0]);
myNetwork.propagate(learningRate,[0]);//0,1=>1
myNetwork.activate([0,1]);
myNetwork.propagate(learningRate,[1]);//1,0=>1
myNetwork.activate([1,0]);
myNetwork.propagate(learningRate,[1]);//1,1=>0
myNetwork.activate([1,1]);
myNetwork.propagate(learningRate,[0]);
}
這里我們運行該網路20000次。每一次我們都前向和反向傳播4 次,為該網路輸入4 組可能的輸入:[0,0][0,1][1,0][1,1]。
首先我們執行 myNetwork.activate([0,0]),其中[0,0]是我們發送給該網路的數據點。這是前向傳播,也稱為激活這個網路。在每次前向傳播之後,我們需要執行反向傳播,這時候網路會更新自己的權重和偏置。
反向傳播是通過這行代碼完成的:myNetwork.propagate(learningRate,[0]),其中 learningRate 是一個常數,給出了網路每次應該調整的權重的量。第二個參數0 是給定輸入[0,0]對應的正確輸出。
然後,該網路將自己的預測與正確的標簽進行比較,從而了解自己的正確程度有多少。
然後網路使用這個比較為基礎來校正自己的權重和偏置值,這樣讓自己的下一次猜測更加正確一點。
這個過程如此反復20000次之後,我們可以使用所有四種可能的輸入來檢查網路的學習情況:
->[0.0]console.log(myNetwork.activate([0,1]));
->[0.]console.log(myNetwork.activate([1,0]));
->[0.]console.log(myNetwork.activate([1,1]));
->[0.0]
如果我們將這些值四捨五入到最近的整數,我們就得到了正確的異或運算結果。
這樣就完成了。盡管這僅僅只碰到了神經網路的表皮,但也足以幫助你進一步探索 Synaptic 和繼續學習了。http://github.com/cazala/synaptic/wiki 這里還包含了更多好教程。
C. 異或門 的演算法
「異或」XOR 函數當有奇數個輸入變數為真時,輸出為真!
當輸入X=0,Y=0 時 輸出S=0
當輸入X=0,Y=1 時 輸出S=1
0代表假 1代表真
異或門主要用在數字電路的控制中!
異或運算及異或門由邏輯非、邏輯與和邏輯或可以實現異或邏輯運算,即 。式中「 」為異或邏輯運算符號,讀為「異或」。實現異或運算的門電路是異或門,異或門的真值表如表1.13所示,其邏輯符號如圖1.11所示。
二輸入異或邏輯的運算規則是:若兩個輸入變數的邏輯值相同,則它們的異或值為「0」;
若兩個輸入變數的邏輯值不相同,則它們的異或值為「1」。簡言之,「相同則0,相異則1」。
http://www.hsit.e.cn/jingpin/dzjsjc/skja/1.doc
D. 不懂高數,怎麼做異或運算
1、應該是0~31bit吧?
1522279897轉化成二進制是(前面用零補齊32bit)
向左循環移位 4 個 bit就是把最左邊4bit放到最右邊得到
,十進制為2881641877。
2、十六進制 2c99908e轉化成二進制是(前面用零補齊32bit)
異或就是對照兩個數相應的bit:都是0或者都是1,那麼該位就為0;一個是0一個是1,該位就為1。結果為,十進制為2270940443。
題外話:這是計算機知識,不是高數
E. 邏輯異或運算是什麼
1、異或(xor)是一個數學運算符。它應用於邏輯運算。
2、異或的數學符號為「⊕」,計算機符號為「xor」。其運演算法則為:a⊕b = (¬a ∧ b) ∨ (a ∧¬b)
3、如果a、b兩個值不相同,則異或結果為1。如果a、b兩個值相同,異或結果為0。
4、邏輯異或運算簡稱異或。英文為exclusive OR,或縮寫成xor。
5、異或也叫半加運算,其運演算法則相當於不帶進位的二進制加法:二進制下用1表示真,0表示假,則異或的運演算法則為:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同為0,異為1),這些法則與加法是相同的,只是不帶進位,所以異或常被認作不進位加法。
(5)異或演算法器擴展閱讀
一、運演算法則
1、a ⊕ a = 0
2、a ⊕ b = b ⊕ a
3、a ⊕b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c;
4、d = a ⊕ b ⊕ c 可以推出 a = d ⊕ b ⊕ c.
5、a ⊕ b ⊕ a = b
二、邏輯表達式:F=AB』⊕A』B((AB』⊕A』B)』=AB⊙A』B』,⊙為「同或」運算)
F. java中異或是怎樣算的
概述
i = 14,異或演算法轉換二進制,同則取0異則取1;
解析
異或是一種基於二進制的位運算,用符號XOR或者^表示,其運演算法則是對運算符兩側數的每一個進制位同值則取0,異值則取1.
簡單理解就是不進位加法,如1+1=0,0+0=0,1+0=1.
For example:
3^5 = 6
轉成二進制後就是 0011 ^ 0101 二號位和三號位都是異值取1 末尾兩個1同值取零,所以3^5 = 0110 = 6
而 i = 50 ,j = 60;
所以:
i 的二進制 = 00110010
j 的二進制 = 00111100
同位相同取0,不同取1所以得出來的值為00001110
i = i ^ j;所以i = 00001110 = 14
拓展內容
異或運算符
性質
1、交換律
2、結合律(即(a^b)^c == a^(b^c))
3、對於任何數x,都有x^x=0,x^0=x
4、自反性 A XOR B XOR B = A xor 0 = A
異或運算最常見於多項式除法,不過它最重要的性質還是自反性:A XOR B XOR B = A,即對給定的數A,用同樣的運算因子(B)作兩次異或運算後仍得到A本身。這是一個神奇的性質,利用這個性質,可以獲得許多有趣的應用。 例如,所有的程序教科書都會向初學者指出,要交換兩個變數的值,必須要引入一個中間變數。但如果使用異或,就可以節約一個變數的存儲空間: 設有A,B兩個變數,存儲的值分別為a,b,則以下三行表達式將互換他們的值 表達式 (值) :
A=A XOR B (a XOR b)
B=B XOR A (b XOR a XOR b = a)
A=A XOR B (a XOR b XOR a = b)
#code:
G. 請問什麼是異或校驗
異或校驗演算法(又稱為BCC校驗)
下面就是異或校驗的演算法,多用於串口通信:
#include "stdio.h"
void main()
{
int i;
//任意10個數值,也可以不是8位
unsigned char data[10]={0x12,0x21,0x1A,0xB1,0xC1,0xEB,0xDF,0xCA,0xF6,0xDD};
unsigned char out;//用於保存異或結果
out=0x00;
for (i=0;i<sizeof(data);i++)
{
out^=data;
}
printf("原來的校驗值:%X ",out);
out^=(data[0]^0xee);//將data[0]改為新數據後計算新校驗和的方法
out^=(data[5]^0x20);//將data[5]改為新數據後計算新校驗和的方法
printf("修改後校驗值:%X ",out);
data[0]=0xee; //採用原始的方法計算新的校驗和,和前面的校驗和對比是否正確
data[5]=0x20; //採用原始的方法計算新的校驗和,和前面的校驗和對比是否正確
out=0x00;
for (i=0;i<10;i++)
{
out^=data;
}
printf("原始方法得出校驗值:%X ",out);
}
作用:
防止自己的程序被篡改。
有些可執行程序,當被改了資源時再運行會有文件已損壞的提示,這就是使用了數據校驗。本例是用md5做為數據校驗的演算法。當然你可以使用個性化的比如des作為數字簽名,那樣安全性更高。
(7)異或演算法器擴展閱讀:
最簡單的檢驗
實現方法:最簡單的校驗就是把原始數據和待比較數據直接進行比較,看是否完全一樣這種方法是最安全最准確的。同時也是效率最低的。
應用例子:龍珠cpu在線調試工具bbug.exe。它和龍珠cpu間通訊時,bbug發送一個位元組cpu返回收到的位元組,bbug確認是剛才發送位元組後才繼續發送下一個位元組的。
奇偶校驗Parity Check
實現方法:在數據存儲和傳輸中,位元組中額外增加一個比特位,用來檢驗錯誤。校驗位可以通過數據位異或計算出來。
應用例子:單片機串口通訊有一模式就是8位數據通訊,另加第9位用於放校驗值。
md5校驗和數字簽名
實現方法:主要有md5和des演算法。
適用范圍:數據比較大或要求比較高的場合。如md5用於大量數據、文件校驗,des用於保
密數據的校驗(數字簽名)等等。
應用例子:文件校驗、銀行系統的交易數據
參考資料:網路-數據校驗