變量101:了解您的計算機

遺憾的是,我發現 2018 年沒有多少人想學習編程🙁,但即使我只讀過我的 前面的文章 一個人,過了一段時間就能夠向自由軟件項目發送提交,我會對我的工作感到滿意 🙂

對於安全愛好者,我保證下一篇將是關於安全的帖子 🙂 所以每個人都很高興,如果有人想學習其他東西(比如 git、服務器管理或諸如此類的 :p ),或者評論任何其他可以的主題在評論框中很難回答,請告訴我,我們將看看如何解決這個問題 😉

好吧,現在如果我們回到我們的業務,之前我們討論過打字,這與我們在程序中存儲變量的方式有關,現在我們將回顧一下內部發生的一些事情,並希望這已經足夠清楚了。

我認為這是我在寫關於編程的文章時經常提到的一個話題,它確實讓我著迷,幫助我理解了很多東西,現在我將嘗試解釋一下它們是如何,如何閱讀的,以及它們的用途 🙂

想像一個電燈開關,當電路閉合時,我們有一個 0 在屏幕上,當我們改變開關的位置時,因為 1🙂 很簡單不是嗎?

現在一個 0 和 1 它們可以意味著很多東西,這完全取決於你的創造力,假設我想知道有人要去北方還是南方, 1 可以表示北方和 0, sur 🙂 假設我想知道某人是男人還是女人, 1 可以是男人和 0,女人🙂。 現在我想知道這個人是年輕還是年老(>22), 0 可以意味著年輕和 1,老人。 讓我們繼續想像......你有寵物嗎? 1 我會說是的,同時 0 我會說不。 現在我想讓你和我一起讀下面這行話:

1001

這是簡短的說法...

Una jóven mujer de no más de 22 años se dirige al norte acompañada de su mascota.

這與以下內容非常不同:

0110 o Un hombre con más de 22 años de edad se dirige solo hacia el sur.

字節

現在我們要更進一步,我們要學習如何讀取字節。 一個字節是由 8 位組成的序列,從右向左讀取,每個位 1 代表著一種力量 2 提升至 n 東德 n 是位位置。 因為聽起來很中文,讓我們舉一個小例子 🙂

01001011 我們有了這個字節,現在我們將從右到左( <- ),我將從上到下放置它們,以便能夠寫出它們的含義:

1:鑽頭就位 0 告訴我們以下 2 被提升為零或 2^0。 我們知道這相當於 1.

1:第二位,現在的位置 12^1 這和說的一樣 2

0:第三位……應該是這裡 2^2,但由於它沒有打開,我們將保留它 0

1:第四位, 2^3 u 8 🙂

0: 與 0

0:其他 0

1: 現在我們在 2^6 o 64

最後 0 ,我們已經知道它的含義 🙂 現在我們將添加我們的結果並將其與下表進行比較 🙂 我們有一個 75 那麼讓我們在專欄中尋找它 十進制 我們會看到出現了什麼 燒焦

ascii 表的圖像結果

我們有一個 K!! 恭喜,你已經知道如何讀取二進制了 🙂 但最精明的人可能已經註意到,我們還獲得了一個十進制數,並且這有一個限制(當所有值都是 1)這個限制可以在數量中找到 255.

Word

現在不止一個會告訴我,但如果我需要一個大於 255? 或者我在哪裡可以找到像日本這樣的其他角色? 答案很簡單,我們一起來吧 2 bytes。 現在我們有兩個,我們可能的組合數是 2^16 o 65536 可能的結果,例如 0 是其中之一,最大可能是 65535。 這個號碼對任何人來說都敲響了警鐘嗎? 你還記得Linux系統上的最大端口數嗎? 我給他們留了作業😉

雙字和四字

對於更多的數學知識,還有特定的格式, 雙字 正如許多人已經想像的那樣 2 word o 4 bytes (o 32 bits)信息,等同於:

11111111111111111111111111111111 或取消 0 a 4 294 967 295

說到這裡,很多人會想知道負數會發生什麼,也就是說,它們必須在某個地方被考慮,對嗎? 為了存儲負數,處理器開發人員選擇佔據左側第一位作為符號值。 這意味著如果第一位是 0 我們正在談論一個正數,但如果它是 1 我們有一個負面的現在看看為什麼這些位如此特別,它們可以是您想要的任何東西😀

但這顯然讓我們少了一個位置來執行乘法! 所以我們的0 a 4 294 967 295 變成:

-2,147,483,648 a +2,147,483,647

現在,我們中的許多人已經擁有處理器 64 bits,這是 a 的值 四字,我們可以得到的值範圍為 0 a 18 446 744 073 709 551 615。 這是一個很大的數字 🙂

為什麼是8位?

這是很多人都會想知道的事情,答案就在硬件中。 從誕生之日起,處理器就需要數據才能執行操作。 數據存儲在計算機的內存中,每次處理器需要它時,它都會使用數據總線來獲取它。 在古代,這些總線每個週期最多可以傳輸 8 位,這意味著移動數據的最大且最有效的方式是將 8 位分組並將它們發送到處理器。

隨著時間的推移,直到今天,處理器已經具備了移動 16 位、32 位和……64 位的能力。

和打字有什麼關係?

我們現在處於一切都有意義的部分 🙂 類型是編程語言用來命名這些內存空間的屬性。 所有變量在這些數據類型之一中都有其對應項,無論它們被稱為什麼。 這些被稱為 原始數據類型,每種強類型語言都有其對這些值的概念以及它們所代表的數量。 例如,在 C 中我們有庫 limits.h 它向我們展示了原始值的最大和最小數量。

讓我們看看如果我們嘗試破壞其中一個值會發生什麼:

擁有。 克里斯托弗·迪亞茲·里維羅斯(Christopher Diaz Riveros)

右邊是文件的值 limits.h 在左邊我們取了這些值之一(unsigned short int)並且我們分配了一個比相應數字更大的數字。 結果,編譯器警告我們,我們正在濫用內存,因為二進制形式 66666 不能符合二進制形式 65535。 這給我們帶來了一個教訓 性能 編程時,如果你的值不會隨著時間的推移而增長太多,或者你不需要像 a 這樣大的值 翻番 o 四字,使用正確的類型可以減少CPU請求的內存量,這意味著如果計算得當的話,獲取數據的速度會更高。

在口譯員方面,這更容易,因為 隱式轉換。 C。當我們用 javascript 或 Python 等語言定義變量時,解釋器會負責理解它是什麼類型,並分配足夠的內存空間來執行操作。 讓我們看一個簡單的例子 🙂

擁有。 克里斯托弗·迪亞茲·里維羅斯(Christopher Diaz Riveros)

正如你所看到的,我們不必向 python 解釋器解釋變量的類型,因為它負責分配類型並將其存儲在內存中 🙂

了解你的變量

這取決於您要使用的語言和實現類型,但是能夠編程的第一步是學習可以使用的變量 🙂 一旦理解了變量,您就可以使用它們以有效且合乎邏輯的方式存儲信息(由用戶或系統提供)。 這是編程階梯的第一步,希望在閱讀本文後,您能夠更好地了解計算機的工作原理以及它如何存儲信息。 對我來說,這會持續到下一篇文章,記得留下你的評論,看看是否有任何具體觀點需要加強或評論。 問候


發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。

  1.   路易斯 他說:

    寫得好,簡潔明了,同時對所有觀眾來說都很有趣。 好工作。

    1.    克里斯·阿德 他說:

      非常感謝,問候 回复

  2.   約翰耶穌 他說:

    很好的解釋。 你是一台機器。

    1.    克里斯·阿德 他說:

      謝謝

  3.   他說:

    解釋得很好,謝謝

    1.    克里斯·阿德 他說:

      感謝您完整地閱讀它

  4.   迭戈 他說:

    非常好,感謝您的投入。 利用我諮詢的二進制主題,您有可能給我們一類IP、子網等。 我知道這不是一個編程問題,但我一直在等待對該問題的良好解釋。
    再次感謝您的解釋。

    1.    克里斯·阿德 他說:

      你好,迭戈,好吧,這是可以做到的 🙂 說實話,我也沒有深入探討這個主題,但沒有比在文章中尋找分享內容更好的調查方法了 🙂 我們將離開將其列入列表是因為下一篇文章已經有一個主題並且它將涉及強化。 問候 🙂

  5.   彼得 他說:

    您是一位出色的老師,並且非常慷慨地傳授您所知道的知識。 恭喜並謝謝你。

    1.    克里斯·阿德 他說:

      非常感謝佩德羅 🙂 我仍在尋找教書的地方,不幸的是,在秘魯,當你只有技術專業學位時,這是很困難的,所以現在我正在考慮在這里或任何可能的地方繼續我的大學學習的可能性,甚至在國外申請碩士學位,誰知道呢,也許很快就會發生這樣的事情 🙂 但教學絕對是讓我開心的事情 🙂 問候

  6.   東西 他說:

    我沒有讀過對該主題的更好解釋,第一個例子很棒

    雖然我沒有聽說過字(作為 16 位變量)、雙字或四字

    不管什麼“已經編程”,這些帖子都很有趣。 如果這篇文章有任何缺點,那就是使用 C (limits.h) 作為變量大小的示例,C 具有現有的最不具體的規範

    1.    克里斯·阿德 他說:

      你好 🙂 非常感謝,這個例子是我一路上想到的 😛 對於那些讀過一點彙編的人來說,這肯定是已知的數據,這就是處理器所理解的 🙂 哈哈哈 當然 C 不是很具體,但是我認為這是因為可移植性及其支持的不同架構如此多樣化,以至於 C 必須適應每種類型的處理器才能真正實現可移植 🙂
      問候和感謝分享。

  7.   塞爾吉奧 - 他說:

    Unnn 如果這一系列教程是基於 rust 的話,那會很有趣,我認為它是當今正在開發的最有趣的語言之一。
    我支持它,但我認識到這是一門困難的語言,但有著美好的未來......
    我期待你的下一篇文章,它們真的很有趣。
    問候。

    1.    克里斯·阿德 他說:

      嗨,Sergio,這肯定很有趣,我聽說 GNOME 計劃將 Rust 實現到他們的程序套件中,我還沒有看到完整的範圍,但遷移即將到來。
      至於語言,我個人還在學習C,我希望能夠在接下來的幾個月內開始在內核上進行開發,並且我寧願在開始復習新語言之前深入學習幾門語言,但是我在 Rust 中肯定可以找到一些有趣的東西並做一些例子,因為它的文檔本身看起來就很不錯。
      問候和感謝分享sharing

  8.   大衛 他說:

    這篇文章和上一篇文章中都有很好的解釋。 我希望你繼續這個我覺得很有趣的主題。

    1.    克里斯·阿德 他說:

      你好大衛,我也希望能夠繼續寫作,最重要的是激勵人們參與自由軟件,現在有這麼多的項目和需求,如果有一些額外的人手來開發那就太好了🙂
      問候

  9.   市場 他說:

    你能寫一篇關於圖靈機的文章嗎?

    1.    克里斯·阿德 他說:

      嗨,瑪特,我想我們之前在評論中已經談到過它,對吧? 我確信我可以就這個主題整理出一些有趣的東西 🙂 讓我們看看會出現什麼結果。 問候並感謝您閱讀我的所有文章,從第一天到今天,我一直看到您非常感興趣 🙂

  10.   艾倫·拉拉 他說:

    哇,非常感謝,這是一個很棒的解釋。

    問候

    1.    克里斯·阿德 他說:

      非常感謝艾倫 🙂 問候

  11.   拉蒙·伊達爾戈(Ramon Hidalgo) 他說:

    我讀過你之前的帖子! 非常感謝您的解釋,儘管我想我永遠無法完全理解這個“詞”。

    1.    克里斯·阿德 他說:

      你好拉蒙 🙂 非常感謝您閱讀這兩篇文章。 如果有什麼價值的話,“詞”是一個字節的演變,它就像處理器,之前有 8 位,之後有 16 位,等等......這是因為我們需要越來越多的空間來處理和更好的速度或者權力……“單詞”的誕生是因為“字節”的空間不足,“雙”和“四”字也是如此 🙂 這是自然的演變,使我們能夠添加權力和空間,以便能夠繼續發展🙂

      問候

  12.   匿名 他說:

    今年2018年我學編程是還是是,謝謝

    1.    克里斯·阿德 他說:

      我很高興 🙂 努力吧! 問候

  13.   吉列爾莫 他說:

    非常感謝,繼續保持。 我已經知道如何編程,但我等待你的教導,因為我自學的編程充滿了不好的做法。

    1.    克里斯·阿德 他說:

      謝謝吉列爾莫 🙂 好吧,我希望你也能在以下帖子中找到有趣的東西 🙂 問候

  14.   埃德加 他說:

    簡單的解釋總是最好的......優秀......
    我會建議 git...對於程序員來說,當你想作為一個團隊工作並將你的工作按順序...版本...時,它是基本的...

    1.    克里斯·阿德 他說:

      非常正確的埃德加,我會嘗試發布有關它的內容,儘管很難說一些新的東西,因為 git 文檔已經很豐富,而且有些東西已經翻譯成多種語言。 我會看看我能做什麼,問候並感謝分享

  15.   蒂里里裡 他說:

    你好,從0到18 446 744 073 709 551 615的數字是對應64位十進制值還是引用另一個值?好吧,計算2^64的冪,我得到的結果是:18 446 744 073 709 552。

    1.    克里斯·阿德 他說:

      您好,Tiririri,我認為您遇到了舍入問題,您可以嘗試使用以下命令 bc? 是一種設計為具有最大可能精度的編程語言,一旦進入其中,只需要做 2^64,也許這會解決它 🙂 讓我知道進展如何,問候

      。 實際值是 18 446 744 073 709 551 616,但我們要減去 1,因為 0 算作可能值 🙂

      1.    蒂里里裡 他說:

        謝謝,我用網上找到的功率計算器計算了一下(https://es.calcuworld.com/calculadoras-matematicas/potencias/)這就是它給我的結果。
        是的,我已經嘗試過 bc 命令,它確實給了我你寫下的值。

  16.   蒂里里裡 他說:

    再次您好,您引用 limit.h 庫的圖像非常小,無法讀取(至少我無法讀取它,因為我看到每個人都這樣做了),而且因為我不明白它,我沒有繼續讀下去。 不知道你能不能改一下,希望不要打擾你。

    1.    克里斯·阿德 他說:

      你可以嘗試一下移動版本,那些看起來更清晰一些,這是一個wordpress主題:/另一方面,所有的C頭文件都可以在 /usr/include/ 中找到,在這種情況下你可以選擇直接閱讀它,如果你喜歡。這樣更容易 🙂 我會嘗試上傳更大的圖像,看看是否有幫助 🙂

      1.    蒂里里裡 他說:

        謝謝,我想我應該耐心等待,哈哈。

  17.   嘉京 他說:

    感謝這篇文章,因為現在我對語言的變量和表示範圍有了更好的了解,現在我認為我應該開始使用“stdint.h”庫,因為他們建議在用 C 語言編程時使用它,因為我一直在使用“stdint.h”庫。教老派,因為記憶是寶貴的,人們必須小心使用它

    1.    克里斯·阿德 他說:

      不需要 Katekyo,使用標準庫當然更好,但我可以向您保證,最好了解 uint_least8_t 和 uint_fast8_t 的區別,這是通過了解原始數據類型來實現的,這是這篇文章的目標🙂 非常感謝您的評論和閱讀這篇文章,問候

  18.   勝利者 他說:

    :噢,一個高超的解釋! 我知道部分概念,但我從這篇文章中獲得了很多新知識

    1.    克里斯·阿德 他說:

      非常感謝維克多 🙂 這篇文章能有所幫助是件好事,問候

  19.   吉爾 他說:

    我非常喜歡Python以方便編程,我看到了一個課程 http://zetcode.com/gui/pyqt4/ 我喜歡最後的俄羅斯方塊: http://zetcode.com/gui/pyqt4/thetetrisgame/
    我在一個夏天修改了這個俄羅斯方塊,一點一點地添加了分數、多人遊戲和音樂,但非常有趣。

    1.    克里斯·阿德 他說:

      你好 Guille,看到你正在開發的軟件一點一點成長當然是非常有趣的 🙂 這是一種無與倫比的體驗,更重要的是,當有人發現你正在開發的東西有用時,那是來自另一個世界的 😀 非常感謝你用於分享🙂

      1.    吉爾 他說:

        我已經將我所做的上傳到(30Mb 的小音樂) http://guillermo.molleda.com/Tetris9.7z
        你必須為每個玩家配置不同的初始速度,或者如果你在新遊戲後重新開始點,......,並且有三個玩家,這樣我的兩個女兒就可以和我一起玩。 甚至讓人上癮。