近期突然對驗證碼的識別感興趣了,然后就研究了一些圖像識別和處理的資料,其中有一種圖像處理是關於字體的細化和骨架提取的,但是這種算法沒有現成的java代碼實現,那些號稱的java版代碼多半都是效果很差或是根本不行的..搜索的途中看到一個用python實現的細化提骨架算法,效果很不錯,想着就把這個python實現改寫成java的好了..但是呢,其實我不懂python,所以先去w3c看了一遍python語法,然后開始改寫...問題出現了...當遇到源程序中的邏輯運算符 and 的時候,我猶豫了..來看看w3c中關於and的解釋:
布爾"與" - 如果x為False,x and y返回False,否則它返回y的計算值。
看到這個精簡的解釋后,我震驚了..它到底在說什么..這和邏輯與有甚么關系..python中邏輯與的定義怎么會這么奇葩..算了,直接用if else把這段話翻譯一遍糊弄過去就算了..但是之后源程序中出現了 xx and xx and xx的語句,這要用if else來翻譯那簡直了...我突然想正常人的大腦如果按照這個邏輯怎么可能預期到這段表達式的意義...python的邏輯與應該不奇葩,奇葩的應該是這段解釋才對...重新理了一下思緒..
java中邏輯與(&&)的定義是很清楚的,解釋如下:
與:
a & b :當a,b同時為true時,a&b為true,否則為false
邏輯與:
a && b,當a為false時,那么a && b就直接返回false,不會對b再進行判斷,因為當a為false時候,無論b為何值,表達式a && b根據與的定義都將是false..但是如果a為true,則需要進一步計算b的值,根據b的值不同,表達式a && b的最終值也不同.
對比了一下w3c的解釋后發現,原來他們說的是一個事情..但是w3c的說法有一定的誤導性,它過分強調了表達式的值為x或是y,而淡化了表達式的含義..讓人有一種錯覺,邏輯與的值不是與出來的,而是某種情況下a或是b的值..