一些簡單又有趣的代碼

2020-12-13 b滿目星河d

編程過程中總會遇到一些有趣的代碼,今天小編為大家整理幾個我遇到的且有點意思又簡單易懂的代碼。

交換兩個變量的值

比如交換a,b兩個變量的值。(默認它們都是int類型)。經典而又安全的解法是這樣的:

藉助第三變量完美的解決了問題,安全又易懂。然而我看到有些人不需要藉助第三變量的,他們的解法是這樣的:

這種方法雖然也成功交換了兩個變量的值,但出錯的情況也不容小看。以int類型為例,int類型的變量佔四個字節,一個字節8位,總共是32位。一個int類型的變量能最大表示的二進位數是11111111-11111111-11111111-11111111對應的十進位數是4294967295。而如果我們交換的兩個變量的和超過了這個數就會出錯。出錯在這一步:a+=b。從理論上是約有一半的可能出錯,但從實際上看可能不會,因為我們不會交換這麼大數量的值。其實我做過的程序案例那麼多,我還沒遇到過要交換兩個變量的。第二種方法除了可以省一個變量的內存外,我還沒看到有別的優點。如果你覺得這種方法逼格高一點,那麼請看下面的第三種方法:

這種方法用到了異或運算浮:^。異或運算的意思是兩個變量對應的二進位數相應位值是否相異,相異的為1,相同的為0也就是 0^0=0; 1^1=0; 0^1=1; 1^0=1; 比如2^6=4;因為十進位的2對應的二進位為010;十進位的6對應的二進位為110,對應位相異或後得100也就是4。學過邏輯電路的孩子們應該更加清楚異或運算。這種方法逼格更高不過缺陷也更大,因為異或運算屬於位運算,而位運算只能作用於整數類型,也就是說用這種方法不能交換兩個有小數的變量了。

神奇的死循環

有時候下面這段代碼會出現死循環:

原本只是想通過for循環讓數組的每一個元素為零,沒想到卻出現了死循環。很多人覺得問題出在i<=10這裡,沒錯這是直接原因,但死循環的根本原因卻是在第一行。編譯器有可能將i的存儲地址緊接在數組之後,當數組越界訪問到a[10]時正好是i的位置將i置0了,也就永遠循環下去了。這就是為什麼每本書都說數組越界會產生意想不到的效果。當然也有可能編譯器不把i的地址放在數組之後,你得看它心情。避免上述錯誤的方法就是養成良好的編程習慣。能用局部變量就不用全局變量,能用作用域小的變量就不用大的,比如上面的i明明就可以放在for循環裡面定義。

以上就是小編要和大家分享的,喜歡我的文章請關注,我們一起學編程。

相關焦點

  • 正弦、餘弦定理一些有趣簡單的推論
    今天我們來談談這兩個定理的一些簡單有趣的推論。之所以簡單,因為我會,之所以有趣,因為不考。推論4、三角形外接圓半徑本推論證明起來簡單之極
  • 簡單實用的數據清洗代碼
    一周前,我在領英上提問並解答了一些數據科學家和從業人員關於數據科學炙手可熱的問題。如果您一直關注我的工作,我在LinkedIn上忙於實現共享學習環境的民主化,以數據科學上為主,通過有抱負的數據科學家和其他不同專業知識和背景的數據專家的LinkedIn上發起討論。 如果您想參與有關數據科學的有趣話題的討論,請隨時LinkedIn關注我。
  • Keil C51的一些有趣特性
    在此我那出我近日一些不成熟的想法,希望大家斧正。有啥不正確的,請一定告之與我。 Keil C51的一些有趣特性 Keil c51號稱作為51系列單片機最好的開發環境,大家一定都很熟悉。它的一些普通的特性大家也都了解,(書上也都說有)如:因為51內的RAM很小,C51的函數並不通過堆棧傳遞參數(重入函數除外),局部變量也不存儲在堆棧中,而是存在於固定的RAM中及寄存器中。那麼看一下下面的程序。
  • 簡單代碼的秘訣
    我上學時候的程序設計老師用通俗易懂的話給我講過一遍,並且用一些示例代碼一步步教我如何去運用它。 然而直到10年後,我才真正理解。 但是現在,憑藉過往的經驗,我深深地體會到了這堂課的意義,我現在就分享給你。這個秘密是平均生產率和10倍生產率之間的關鍵區別,如同槓桿一般,可以讓我們把效率提高几個數量級。
  • 有趣是一種生產力:鳳凰機器人3.0課程之—圖形化與代碼編程課程
    由於Python是純代碼編程課程,青少年學習起來會有些枯燥,因此保持課程的趣味性尤為重要。鳳凰機器人的Python課程追求實用與趣味結合,課程主題通常是解決實際的問題,包含了豐富的實踐環節,為孩子帶來開拓創新的好機會。在Python課程中,前兩本書主要是基礎語法與高階語法的介紹,為孩子打牢基礎。之後的代碼圖形課程中,包含了一些非常實用而有趣的編程應用。
  • 零代碼時代即將到來?沒那麼簡單!
    這當然是一個好的趨勢,而且,市場上已經出現了一些優秀的「零代碼」工具。所以,「零代碼」時代真的要到來了嘛?沒那麼簡單!為什麼要「零代碼」?「零代碼」的優勢很明顯。「零代碼」解決了什麼問題?編寫代碼不僅是數位化轉型的關鍵也是其制約。因為代碼通常不是那麼好寫的,於是,簡化代碼或者實現「零代碼」的意義是巨大的。簡言之,用規範的程序語言語法來編寫和實現商業邏輯是一件枯燥乏味的事情。就像會開車的人只需掌握簡單易操作的駕駛技巧而無需知道發動機如何工作一樣,代碼界也需要這樣的運作模式以實現軟體開發的普適化。
  • 零代碼時代即將到來?沒那麼簡單
    這當然是一個好的趨勢,而且,市場上已經出現了一些優秀的「零代碼」工具。所以,「零代碼」時代真的要到來了嘛?沒那麼簡單!為什麼要「零代碼」?「零代碼」的優勢很明顯。就像會開車的人只需掌握簡單易操作的駕駛技巧而無需知道發動機如何工作一樣,代碼界也需要這樣的運作模式以實現軟體開發的普適化。不幸的是,這個問題已經被仔細研究過很長時間了,卻沒有被很好地解決。抽象語言具體化然而,代碼的抽象性往往決定了它很難被簡化。
  • 簡單一個代碼,就可以查到別人拿你手機做了一些什麼!
    手機的命令代碼,就是安卓工程模式的指令,即通過手機拔號界面輸入相關的隱藏代碼(一般是不同的組合鍵),快速進入工程測試模式,可直觀的將手機的使用狀況反應出來,對於購機或購買二手手機時可進一步了解手機的狀況,我們來看一下幾組合比較常用的命令!
  • 極客晨星的課程有趣、簡單,孩子們容易上手_綜合_江西網絡廣播電視臺
    3、體系夠全面基於遊戲化設計思維,自主研發極客星碼全體系課程,專為5-16歲孩子設計,模塊與代碼循環切換,輕鬆入門。課程用的是極客晨星自主研發的極客星碼將課程體系,把代碼變成了簡單好玩的積木,一塊塊去搭建,這就是輸入指令完成遊戲設計的「可視化」過程。
  • 代碼又長又複雜?總結Python一行代碼就能幹的事兒,不能更簡單了
    一行代碼列印9*9乘法表一行輸出9*9 乘法表只是把原本應該寫兩個for循環的代碼做了一下精簡壓縮。以下結果我們可以根據輸出的結果觀察Python代碼在編譯器中的執行過程。一行代碼輸出文件內容print(''.join([line for line in open('test.go')]))這行代碼其實看起來也很簡單,通過open()函數打開一個 "test.go"的代碼文件會隱性的得到一個文件對象,然後對這個文件對象進行迭代求值,將每一行對內容放到
  • 盤點一些很有趣的網站,玩到停不下來
    今天給大家盤點一些很有趣的網站,讓大家放鬆一些。同時這些網站也可以幫你解決一些問題,如果你覺得有用,可以收藏備用。網站主頁很簡單,但設計感十足,是一個旋轉導航輪,貼了一張張海報,每一張海報代表一個互動體驗。通過點擊海報,互動體驗打開了。每一個都是一件藝術品,都有其獨特的設計和功能,它有電腦和手機平板上都有很好的使用體驗。
  • 植物大戰殭屍:隱藏的4個代碼,在殭屍身上找樂子,就是這麼簡單
    在國外受到了如此高的歡迎,那在國內肯定也不簡單,現在有很多的玩家還一直傾向於手機版,不過小編卻對漢化一版情有獨鍾。今天小編給大家帶來的,是隱藏著4個遊戲代碼,在殭屍身上找樂子,就是這麼簡單。變裝這裡的變裝共分為兩個小部分,分別為戴墨鏡和貼鬍子,而這兩個代碼分別是future和mustache。
  • 用代碼理解數學符號
    對於已經學習數學多年的任何人,可以將這樣的方程式解析為代碼。但是對於許多其他人來說,這看起來像象形文字。事實是,古代數學領袖似乎似乎選擇了最有趣的外觀符號來描述相當直觀的方法。結果是:方程和變量看起來比實際複雜得多。我發現,代碼不僅可以用來編寫程序,還可以用來解釋複雜的數學語言。
  • 蒙特卡洛方法-最簡單的代碼
    因此我們的工程師就想出來了一些比較近似的公式來模擬現實情況。現實情況中的數據都是線性的,連續的,但是我們在真正做渲染的時候,數據是有限的,離散的。那麼蒙特卡洛的理論就是PBS或者PBR光照模型中那些公式的理論基礎。那麼蒙特卡洛方法到底講述了一個什麼問題呢?我們下面用程式設計師能理解的方式來闡述一遍。
  • @程式設計師,四步教你寫出簡單易懂的代碼!
    作者 | Dan Goslen譯者 | 彎月,責編 | maozz以下為譯文:說起編程,我的目標是編寫簡單易懂的代碼。也就是 Bob Martin所說的乾淨的代碼。也有人稱之為可讀或可維護的代碼。其實,這眾多說法指的都是同一件事。但做到這一點絕非易事!編寫簡單易懂的代碼需要周全的考慮。需要通過不斷的重構,寫出正確的代碼。通常還需要同事的審核或結對編程。但是,我通過多年的職業生涯總結出了一些模式,這些模式可以幫助我編寫簡單易懂的代碼。
  • 筆試題:編寫插入排序代碼,比冒泡排序還簡單(附代碼)
    最近有同事跳槽某大企業(「**在手,說走就走」),竟然被問到簡單的排序算法,不過不是大家耳熟能詳的冒泡排序,而是插入排序。本文將詳細說明插入排序算法的原理與具體實現代碼,以供大家參考、學習。插入排序插入排序的原理這裡就不用文字來描述原理了,直接以圖例為大家解釋:簡單的說就是把下一位數和前面的N-1個數逐一比較,如果比前面的小,就互換位置,然後再把N-1位和其前面的N-2個數逐一比較
  • 通過LLVM 在 Android 上運行 Swift 代碼
    也就是說,不是生成特定架構的機器代碼,LLVM 為一個虛擬機生成彙編代碼,然後轉換成中間代碼,適配架構需要的實際代碼。手動構建 Swift 代碼如果使用 Xcode,系統會自動完成這些。我們現在需要手動編譯和連接一個簡單的 Swift "Hello world" :// hello.swiftprint("Hello, world!")
  • CSS Grid Layout一些有趣的事情(1)
    我決定和大家一起分享一些我覺得其中特別感興趣的東西。希望大家對這些也會感興趣。可能grid-row-end和grid-column-end會使用小於-1的負值在許多代碼示例和教程中,您可能看到過可以使用grid-column-start:1;和grid-column-end:-1;(或者簡寫grid-column: 1 / -1;),從第一列網格線到第二列網格線創建一個網格標籤(創建一個跨列網格)。
  • 簡單、易用的VBA過程積木代碼
    大家好,今天繼續和大家分享VBA編程中常用的簡單「積木」過程代碼第76-80講,內容是:保存當前工作簿的副本到其它位置備份;不顯示警告框;關閉屏幕刷新;獲取工作表的行數及當前工作表中已使用的行數;將當前工作表NZ移至工作表的最後等內容。 VBA過程代碼76:保存當前工作簿的副本到其它位置備份工作簿。
  • 推薦一些好玩有趣的手機遊戲
    現代社會人們都離不開手機這個東西,除了聊微信什麼的就是玩手遊了,王者榮耀,陰陽師等等什麼的手遊,可是這些遊戲都是需要聯機戰鬥的遊戲,那麼下面由我給大家推薦一些好玩有趣的手機單機遊戲,可以讓大家不會有遊戲荒。