变量101:了解您的计算机

可悲的是,我看到很少有人想学习编程2018🙁,但是即使我只读了我的 以前的文章 一个人,过一会儿就能将提交提交到自由软件项目,我会对我的工作感到满意satisfied

对于那些热爱安全性的人,我向您保证,以下内容将是有关安全性的帖子🙂如果有人想学习其他东西(例如git,服务器管理或我所知道的东西:p),或者对其他主题发表评论,那么每个人都很高兴在评论框中无法轻松回答的问题,请告诉我,我们将看到如何工作it

好吧,现在,如果我们去做事,以前我们曾讨论过键入,并且这与将变量保存在程序中的方式有​​关,现在我们将回顾一下内部发生的事情,希望可以足够清楚。

我认为这是我在撰写程序设计时经常碰到的一个话题,它一定会让我着迷,并且帮助我理解了很多东西,现在我将尝试解释一下它们的含义,阅读方式以及它们的用途。

想想电灯开关,当电路闭合时,我们有一个 0 在屏幕上,当我们更改开关的位置时,因为 1🙂简单吗?

现在一个 0 和 1 它们可能意味着很多事情,这完全取决于您的创造力,假设我想知道某个人是去北方还是南方, 1 可以指北和 0sur🙂假设我想知道某人是男人还是女人, 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 是钻头的位置。 听起来像中文,我们举个例子little

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!! 恭喜,您已经知道如何读取二进制read但是最聪明的人可能已经注意到我们还获得了一个十进制数,并且它有一个限制(当所有值都为 1)在数量中找到该限制 255.

Word

现在不止一个会告诉我,但是如果我需要一个大于 255? 或在哪里可以找到其他字符,例如日语? 答案很简单,让我们放在一起 2 bytes。 现在我们有两个,可能的组合数是 2^16 o 65536 可能的结果,例如 0 是其中之一,最大可能是 65535。 这个数字响吗? 还记得Linux系统上的最大端口数吗? 我让他们做作业home

双字和四字

对于更多的数学公式,还有一些特定的格式, 双字 包含了许多人可能已经想到的 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。 这使我们上了一课 性能 当我们编程时,如果您的价值不会随着时间增长太多,或者您不需要的价值不如 翻番 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.    克里斯·阿德

      佩德罗(Pedro)非常感谢您🙂我仍在寻找教学的地方,很不幸,在秘鲁,如果您仅拥有技术专业学位,这将很困难,所以现在我正在考虑在这里继续学习大学的可能性,或者在哪里我可以继续申请甚至获得硕士学位。知道的外国人也许很快就会收到这样的通知🙂但绝对可以教书,这让我过得很愉快🙂问候

  6.   东西

    我没有读过关于这个主题的更好的解释,第一个例子很出色

    尽管我没有听说过该词(例如16位变量),双字或四字

    不管“我已经编程了”,这些帖子都很有趣。 如果有任何问题,该帖子将使用C(limits.h)作为变量大小的示例,C具有存在的最不特定的规范

    1.    克里斯·阿德

      您好,🙂-非常感谢,我在此过程中想出了一个示例-因为对于那些阅读过一些汇编语言的人来说,它肯定是已知数据,那正是处理器所理解的🙂-哈哈哈,当然,C不是很具体,但是我认为它是由于可移植性和它所支持的不同体系结构的事实如此多样,以至于C必须容纳每种类型的处理器才能真正实现可移植性🙂
      问候和感谢分享。

  7.   塞尔吉奥

    如果这一系列教程基于rust会很有趣,我认为它是当今正在开发的最有趣的语言之一。
    我在他身后,但我认识到这是一门难懂的语言,但前景广阔……
    我期待您的下一篇文章,它们真的很有趣。
    问候。

    1.    克里斯·阿德

      您好Sergio,这一定很有趣,我听说GNOME计划在其程序套件中实现Rust,我还没有看到他们打算的全部功能,但是迁移即将到来。
      至于语言,我个人仍在学习C语言,我希望能够在接下来的几个月内开始在内核中进行开发,并且我更喜欢在开始审查新语言之前深入学习一些语言,但是我绝对可以寻找一些有趣的东西并举一些例子在Rust中,因为它的文档本身看起来还不错。
      问候和感谢分享sharing

  8.   David

    在本文和上一篇文章中都有很好的解释。 我希望您继续我觉得非常有趣的主题。

    1.    克里斯·阿德

      大卫,您好,我也希望能够继续写作,尤其是激励人们使用自由软件,因为现在有如此多的项目和需求,所以有更多的双手可以开发。
      问候

  9.   市场

    您可以发表有关图灵机的文章吗?

    1.    克里斯·阿德

      大家好🙂我认为在某些评论中我们之前已经碰过它,对吗? 我敢肯定,我可以在这个问题上提出一些有趣的东西🙂让我们看看会发生什么。 从第一天到今天,问候和感谢您阅读我的所有文章我一直看到您很感兴趣🙂

  10.   艾伦·拉拉

    哇,非常感谢您的解释。

    问候

    1.    克里斯·阿德

      非常感谢Allan🙂问候

  11.   拉蒙·伊达尔戈(Ramon Hidalgo)

    我读了你以前的帖子! 非常感谢您的解释,尽管我认为我永远不会完全理解这个词。

    1.    克里斯·阿德

      嗨,拉蒙🙂非常感谢您阅读这两本书。 如果有什么用,“字”就是一个字节的演变,就像处理器,出现8位之前,出现16位之后等等,这是因为每次我们需要更多的空间来处理和提高速度时,力量...之所以诞生``单词'',是因为``字节''的空间不足,并且与``双''和``四''这个词一样-正是自然进化使我们增加了力量和空间来继续发展developing

      问候

  12.   匿名

    这个2018年我学会编程是或是,谢谢

    1.    克里斯·阿德

      我很高兴🙂努力! 干杯

  13.   吉列尔莫

    非常感谢,继续努力。 我已经知道如何编程,但是我正在等待您的教,,因为我自学成才的编程充满了不良做法。

    1.    克里斯·阿德

      谢谢吉列尔莫🙂好吧,希望您也可以在以下帖子中找到有趣的内容🙂问候

  14.   埃德加

    一个简单的解释总是最好的..优秀的..
    我会建议git ...对于程序员来说,当您想作为一个团队来工作并按顺序整理版本时,这是基本的。

    1.    克里斯·阿德

      确实,Edgar,我会尝试发布有关它的内容,尽管很难说出新的东西,因为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,因为XNUMX计为可能的值🙂

      1.    提里里里

        谢谢,我用在网上找到的功效计算器进行了计算(https://es.calcuworld.com/calculadoras-matematicas/potencias/),这就是它给我的结果。
        是的,我已经尝试了bc命令,它有效地为我提供了您写下的值。

  16.   提里里里

    再次您好,您引用limits.h库的图像很小,无法读取(至少我无法读取它,因为我似乎每个人都看过),而且由于我不明白,所以我不再继续阅读。 我不知道您是否可以更改它,希望我不会打扰您。

    1.    克里斯·阿德

      您可以尝试移动版本,看起来更清晰一些,这是一个wordpress主题:/另一方面,所有C头文件都可以在/ usr / include /中找到,在这种情况下,如果您愿意,可以选择直接读取它比较容易🙂我将尝试上传更大的图像以查看是否有帮助🙂

      1.    提里里里

        谢谢,我想我应该对此耐心,呵呵。

  17.   嘉京

    感谢您的文章,因为我现在对语言的变量和表示范围有了更好的了解,但是现在我认为我应该开始使用库“ stdint.h”,因为他们建议在使用c进行编程时使用它因为记忆是宝贵的,所以我曾经教过老学校,一个人必须小心用过的东西

    1.    克里斯·阿德

      没有理由使用Katekyo,使用标准库当然更好,但是我可以向您保证,最好知道是什么将uint_least8_t与uint_fast8_t区别开来,并且这是通过了解原始数据类型来实现的,这是本文的目的🙂感谢您的评论和阅读文章,问候

  18.   胜利者

    :或者精巧的解释! 我知道部分概念,但是从这篇文章中我获得了很多新知识

    1.    克里斯·阿德

      非常感谢Victor🙂这篇文章对您的帮助和问候有多好的帮助

  19.   吉尔

    我真的很喜欢Python,使编程变得更容易,我看到了 http://zetcode.com/gui/pyqt4/ 我喜欢最后的俄罗斯方块: http://zetcode.com/gui/pyqt4/thetetrisgame/
    我在一个夏天修饰了这个俄罗斯方块,一点一点地投入点数,多人游戏和音乐,但是却很有趣。

    1.    克里斯·阿德

      您好Guille,看到您正在开发的软件一点一点地增长肯定是很有趣的–这是无与伦比的体验,而且当有人发现您在开发有用的东西时,那就是来自另一个世界,更是如此-谢谢您的分享🙂

      1.    吉尔

        我上传的音乐(音乐30Mb)到 http://guillermo.molleda.com/Tetris9.7z
        您必须为每个玩家配置不同的初始速度,或者如果您在新游戏后重新开始积分,…,那么我的两个女儿有XNUMX个玩家可以和我一起玩。 它甚至上瘾。