Айнымалылар 101: Компьютеріңізді білу

Өкінішке орай, мен 2018 жылы бағдарламаны үйренгілері келетіндердің көп емес екенін көрдім, бірақ мен тек өзімді оқып шықсам да алдыңғы мақала адам және аз уақыттан кейін ақысыз бағдарламалық жасақтама жобасын жібере алатын болса, мен өз жұмысыма риза болар едім 🙂

Қауіпсіздікті жақсы көретіндер үшін мен сіздерге келесідей қауіпсіздік белгілері туралы пост болатынын уәде етемін, егер кімде-кім басқа нәрсені білгісі келсе (мысалы, git, сервер әкімшілігі немесе мен білмесем: p) немесе басқа тақырыпқа түсініктеме берсе, бәрі бақытты болады. түсініктеме терезесінде қарапайым түрде жауап беруге болмайтын болса, маған айтыңыз және біз оны қалай жұмыс істей алатынымызды көреміз we

Ал енді, егер біз өз ісімізге баратын болсақ, бұған дейін біз мәтін теру туралы сөйлескенбіз және бұл біздің айнымалыларды бағдарламада сақтау тәсілімен байланысты болса, енді іштегі болып жатқан оқиғалардың біразын қарастырамыз және үміттенеміз жеткілікті айқын болуы мүмкін.

Биттер

Менің ойымша, бұл бағдарламалау туралы жазған кезде мен үнемі қозғалатын тақырып, бұл мені таң қалдыратын және көп нәрсені түсінуге көмектесетін нәрсе, енді мен олардың қалай екенін, қалай оқылатынын және не үшін керек екенін түсіндіруге тырысамын.

Жарық қосқышы туралы ойлаңыз, тізбек жабылған кезде бізде 0 экранда, коммутатордың орналасуын өзгерткен кезде, өйткені а 1🙂 қарапайым емес пе?

Енді а 0 және а 1 Олар көп нәрсені білдіруі мүмкін, бәрі сіздің шығармашылығыңызға байланысты, біреу солтүстікке немесе оңтүстікке бара жатқанын білгім келеді делік, 1 солтүстік және білдіруі мүмкін 0, сур 🙂 біреудің ер немесе әйел екенін білгім келеді дейік, 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 сондықтан оны бағаннан іздейік Ондық және біз не көрінетінін көреміз Char

Ascii кестесінің кескін нәтижесі

Бізде бар K!! Құттықтаймыз, сіз екілік түрінде оқуды білесіз ғой 🙂 Бірақ ең сиқырлар біз ондық санды алғанымызды және оның шегі бар екенін байқаған шығар (барлық мәндер болған кезде 1) Бұл шектеу саннан табылған 255.

сөз

Енді маған біреуден көп айтады, ал егер маған үлкен сан керек болса не болады 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 бізде теріс. Енді биттердің неге соншалықты ерекше екенін көріңіз, олар сіз қалағандай бола алады can

Бірақ бұл көбейтуді орындау үшін бізге бір кем жағдай қалдыратыны анық! Сонымен біздің0 a 4 294 967 295 айналады:

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

Қазір біздің көпшілігімізде бар 64 bits, және бұл а-ның мәні төрт сөз, бастап мәндері болуы мүмкін 0 a 18 446 744 073 709 551 615. Бұл үлкен сан 🙂

Неге 8 бит?

Бұл біреуден көп қызықтыратын нәрсе, және оның жауабы аппаратурада. Басынан бастап процессорлар операцияларды орындай алатындай мәліметтер қажет болды. Деректер компьютердің жадында сақталады және оны қажет еткен сайын процессор оны алу үшін деректер шиналарын пайдаланады. Ежелгі уақытта бұл автобустар бір циклда ең көбі 8 битті байланыстыра алатын, яғни деректерді жылжытудың максималды және тиімді тәсілі 8 битті топтастырып, оларды процессорға жібереді.

Уақыт өте келе, бүгінгі күнге дейін процессорлар 16 бит, 32 бит және… 64 битті жылжыту қабілетін дамытты.

Оның теруге қандай қатысы бар?

Біз қазір мұның бәрі мағынасы бар бөлігіндеміз 🙂 Теру - бұл бағдарламалау тілдерінің осы жад кеңістігін атау үшін қолданатын қасиеті. Барлық айнымалылардың аналогы осы типтегі мәліметтердің бірінде, қалай аталса да болады. Бұлар белгілі мәліметтердің алғашқы типтеріӘрбір қатты терілген тілде осы құндылықтар және олар білдіретін шама туралы түсінік бар. Мысалы, С-де бізде кітапхана бар limits.h бұл бізге қарабайыр мәндердің максималды және минималды мөлшерін көрсетеді.

Егер мәндердің бірін бұзуға тырыссақ, не болатынын көрейік:

Меншікті. Кристофер Диас Риверос

Оң жақта файлдың мәндері бар limits.h ал сол жағында біз осы мәндердің бірін алдық (unsigned short int) және біз сәйкесінше жоғары санды тағайындадық. Нәтижесінде компилятор жадыны дұрыс қолданбаймыз деп ескертеді, өйткені 66666 екілік формасына ене алмайды 65535. Бұл бізді сабаққа жетелейді орындау біз бағдарламалаған кезде, егер сіздің мәніңіз уақыт өте келе өспейтін болса немесе сіз сияқты мәндерді қажет етпейтін болсаңыз қос o төрт сөзДұрыс типті пайдалану процессор сұраған жад көлемін азайтады, бұл егер олар жақсы есептелген болса, деректерді алудың жоғары жылдамдығын білдіреді.

Аудармашы жағынан бұл оңай жасырын түрлендірулер. Cбіз javascript немесе Python сияқты тілдерде айнымалыны анықтаймыз, аудармашы оның қандай тип екенін түсінуге және операцияларды орындау үшін жеткілікті жад кеңістігін бөлуге жауапты. Қарапайым мысалды қарастырайық 🙂

Меншікті. Кристофер Диас Риверос

Көріп отырғаныңыздай, біз python интерпретаторына айнымалының түрін түсіндірудің қажеті жоқ, өйткені ол типті тағайындау және оны жадында сақтау is

Өзіңіздің айнымалыларыңызды біліңіз

Бұл сіз қолданатын тілге және іске асырудың түріне байланысты, бірақ бағдарламалаудың алғашқы қадамы - сіз қолдануға болатын айнымалыларды үйрену the Айнымалыларды түсінгеннен кейін сіз оларды қолдана алатын жағдайға жетесіз ақпаратты сақтау үшін тиімді және қисынды (пайдаланушы немесе жүйе ұсынады). Бұл бағдарламалау баспалдақтарындағы алғашқы қадам және осы мақаланы оқығаннан кейін сіз компьютеріңіздің қалай жұмыс істейтінін және ақпаратты қалай сақтайтындығын жақсы түсінесіз деп үміттенемін. Келесі мақалаға дейін менімен бірге болады, қандай да бір нақты ойды нығайту немесе түсініктеме беру керек пе екен деп өз пікірлеріңізді қалдырыңыз. Алақай!


Мақаланың мазмұны біздің ұстанымдарымызды ұстанады редакторлық этика. Қате туралы хабарлау үшін нұқыңыз Мұнда.

41 пікір, өз пікіріңізді қалдырыңыз

Пікіріңізді қалдырыңыз

Сіздің электрондық пошта мекен-жайы емес жарияланады. Міндетті өрістер таңбаланған *

*

*

  1. Деректерге жауапты: Мигель Анхель Гатан
  2. Деректердің мақсаты: СПАМ-ны басқару, түсініктемелерді басқару.
  3. Заңдылық: Сіздің келісіміңіз
  4. Деректер туралы ақпарат: заңды міндеттемелерді қоспағанда, деректер үшінші тұлғаларға жіберілмейді.
  5. Деректерді сақтау: Occentus Networks (ЕО) орналастырған мәліметтер базасы
  6. Құқықтар: Сіз кез-келген уақытта ақпаратты шектей, қалпына келтіре және жоя аласыз.

  1.   Луис дижо

    Жақсы жазылған, қысқа әрі түсінікті, сонымен бірге барлық көрермендер үшін қызықты. Жақсы жұмыс.

    1.    ChrisADR дижо

      Көп рахмет, сәлем 🙂

  2.   Джон Иса дижо

    Тамаша түсініктеме. Сіз машинасыз.

    1.    ChrisADR дижо

      Рахмет

  3.   Рубен дижо

    Рахмет өте жақсы түсіндірілді

    1.    ChrisADR дижо

      Толық оқығаныңыз үшін сізге рахмет 🙂

  4.   Диего дижо

    Өте жақсы, енгізгеніңіз үшін рақмет. Екілік мәселені пайдаланып, сіз бізге IP класс, ішкі желі және т.б. бере аласыз. Мен бұл бағдарламалау мәселесі емес екенін түсінемін, бірақ бұл мәселені жақсы түсіндіру әрдайым күтуде болды.
    Тағы да, түсіндіргеніңіз үшін рақмет

    1.    ChrisADR дижо

      Сәлеметсіз бе, Диего, мұны істеуге болады the шындықты айту үшін мен бұл тақырыпқа онша араласқан жоқпын, бірақ тергеудің мақалада осы туралы бөлісетін нәрсе іздеуден гөрі жақсы әдісі жоқ 🙂 Біз оны тізімге қалдырамыз, өйткені келесі жазбада тақырып бар және бұл қатаюмен айналысады. Сәлемдесу 🙂

  5.   Pedro дижо

    Сіз керемет мұғалімсіз және өз білгеніңізді үйрету үшін өте жомартсыз. Құттықтаймын және рахмет.

    1.    ChrisADR дижо

      Педроға көп рахмет 🙂 Мен әлі де сабақ беретін орындарды іздеймін, өкінішке орай бұл жерде Перуде тек техникалық кәсіби дәрежеге ие болған кезде қиын, сондықтан мен қазір осы жерде университеттік оқуды жалғастыру мүмкіндігін қарастырамын немесе қай жерде немесе тіпті шетелдіктерде магистратураға түсу керек, кім біледі, мүмкін жақын арада осындай нәрсе берілетін шығар 🙂 бірақ оқытушылық бұл менің күнімді өзгертетін нәрсе

  6.   бірдеңе дижо

    Мен тақырыпты жақсы түсіндіруді оқыған жоқпын, бірінші мысал керемет

    дегенмен мен бұл сөзді (16 биттік айнымалы сияқты), қос сөзді немесе төрт сөзді естімеген едім

    «мен қазірдің өзінде бағдарламамын» дегенмен, жазбалар қызықты. Егер қандай да бір проблема туындаса, хабарлама C (limit.h) айнымалы өлшемдерінің мысалы ретінде қолданылуы керек, C-де ең аз спецификация бар.

    1.    ChrisADR дижо

      Сәлеметсіз бе, бір нәрсе 🙂 көп рахмет, мен мысалға келе жатып ойлап таптым 😛 өйткені бұл Ассамблеяны аздап оқығандар үшін белгілі мәліметтер, сондықтан процессор түсінеді 🙂 хахаха әрине С өте нақты емес, бірақ менің ойымша Портативтілік пен оны қолдайтын әр түрлі архитектуралардың әр түрлі болуына байланысты, С процессордың әр түрін шынымен портативті етіп орналастыруы керек 🙂
      Сәлемдесу және бөліскеніңіз үшін рақмет.

  7.   Sergio дижо

    Егер бұл оқулықтар тотқа негізделген болса, қызықты болар еді, менің ойымша, бұл қазіргі уақытта дамып келе жатқан ең қызықты тілдердің бірі.
    Мен оның артындамын, бірақ мен бұл тілдің қиын екенін, бірақ болашағы зор екенін түсінемін ...
    Келесі мақалаларыңызды асыға күтемін, олар шынымен де қызықты.
    Құттықтаулар.

    1.    ChrisADR дижо

      Сәлеметсіз бе, Серджио, әрине, қызықты болар еді, мен GNOME Rust бағдарламасын өзінің бағдарламалар жиынтығында іске асыруды жоспарлап отыр деп естідім, мен олардың толық көлемін әлі көрген жоқпын, бірақ көші-қон келеді.
      Тілдерге келетін болсақ, мен C-ді әлі үйреніп жатырмын, мен жақын айларда ядрода дами бастағым келеді және жаңаларын қарастыруды бастамас бұрын бірнеше тілдерді тереңдетіп үйренуді жөн көремін, бірақ мен қызықты нәрсе іздеп, бірнеше мысал келтіре аламын Rust-та, өйткені оның құжаттары өте жақсы көрінеді.
      Сәлем және бөліскеніңіз үшін рақмет 🙂

  8.   Дэвид дижо

    Осы мақалада да, алдыңғы мақалада да өте жақсы түсініктемелер. Маған өте қызықты болып саналатын осы тақырыпты жалғастырады деп сенемін.

    1.    ChrisADR дижо

      Сәлеметсіз бе, Дэвид, мен жазуды әрі қарай жалғастырамын, әсіресе адамдарды ақысыз бағдарламалық қамтамасыздандыруға қатысуға ынталандырамын деп үміттенемін, қазір көптеген жобалар мен қажеттіліктер бар, сондықтан бірнеше қосымша қолдармен жұмыс жасау жақсы болар еді 🙂
      тілекпен

  9.   Наурыз дижо

    Сіз Тьюринг машинасы туралы хабарлама жаза аласыз ба?

    1.    ChrisADR дижо

      Сәлеметсіз бе, Март 🙂 Менің ойымша, кейбір түсініктемелерде біз оны қозғап көрдік, иә? Мен тақырып бойынша қызықты нәрсе жинай алатыныма сенімдімін 🙂 не шығатынын көрейік. Барлық мақалаларымды оқығаныңыз үшін сәлем және алғыс айтамын, бірінші күннен бүгінге дейін мен сізді әрқашан қызығушылықпен көретінмін🙂

  10.   АЛЛАН ЛАРА дижо

    Ой, рахмет сізге қандай жақсы түсіндірме.

    тілекпен

    1.    ChrisADR дижо

      Алланға үлкен рахмет!

  11.   Рамон Идалго дижо

    Алдыңғы жазбаңызды оқыдым! Түсіндіргеніңіз үшін көп рахмет, бірақ мен бұл сөзді ешқашан түсінбеймін деп ойлаймын.

    1.    ChrisADR дижо

      Сәлем Рамон 🙂 екеуін де оқығаныңыз үшін көп рахмет. Егер ол қандай да бір пайда әкелетін болса, «сөз» байттың эволюциясы болып табылады, бұл процессорлар сияқты, бұрын 8 бит болған, 16 биттен кейін және т.с.с. ... өйткені біз әр уақыт сайын көбірек орын қажет етеді процесс және одан да жақсы жылдамдық немесе қуат ... «байт» кеңістігі қысқарғандықтан, «сөз» пайда болды, ал «қос» және «төрттік» сөздермен бірдей - бұл бізді қуат қосуға мәжбүр ететін табиғи эволюция және дамуды жалғастыру үшін кеңістік 🙂

      тілекпен

  12.   аноним дижо

    Осы 2018 мен иә немесе иә бағдарламасын үйренемін, рахмет

    1.    ChrisADR дижо

      Мен қуаныштымын hard көп тырысып көріңіз !! Алақай!

  13.   Гильермо дижо

    Көп рахмет, оны жалғастыра беріңіз. Мен бағдарламалауды білемін, бірақ мен өзімнің оқытатын бағдарламалауым жаман практикаларға толы деген ілімдеріңізді күтемін.

    1.    ChrisADR дижо

      Гильермоға рахмет 🙂 Сонымен, келесі жазбалардан қызықты нәрселер табады деп сенемін 🙂 Сәлемдесу

  14.   Эдгар дижо

    Қарапайым түсініктеме әрқашан ең жақсы .. керемет ..
    Мен бағдарламаны ұсынатын едім ... бағдарламашылар үшін бұл сіз командада жұмыс істегіңіз келсе және жұмысыңызды ретке келтіргіңіз келсе .. нұсқалары ..

    1.    ChrisADR дижо

      Өте шынайы Эдгар, мен бұл туралы мазмұн жариялауға тырысамын, бірақ жаңа нәрсе айту өте қиын, өйткені git құжаттары өте көп және бірнеше нәрсе бірнеше тілге аударылған. Мен не істей алатынымды көремін, сәлемдесемін және бөліскенім үшін рақмет

  15.   Тиририри дижо

    Сәлеметсіз бе, 0-ден 18-ге дейінгі саны 446 744 073 709 551 615 64-разрядты ондық мәнге сәйкес келе ме немесе ол басқа мәнге сілтеме жасай ма? Ал, 2 ^ 64 қуатын есептеп, мен алатын нәтиже: 18 446 744 073 709 552.

    1.    ChrisADR дижо

      Сәлем Tiririri, менің ойымша, сізде дөңгелектеу мәселесі бар, сіз пәрменді пайдаланып көріңіз bc? - мүмкіндігінше дәлдеу үшін жасалған бағдарламалау тілі, оның ішіне кіргенде оны орындау қажет 2^64, мүмкін оны шешетін шығар it қалай өткенін біліп беріңіз, сәлем!

      . Нақты мәні 18 446 744 073 709 551 616, бірақ біз 1-ді алып тастаймыз, өйткені 0 мүмкін мән ретінде есептеледі

      1.    Тиририри дижо

        Рахмет, мен желіден тапқан қуат калькуляторымен есептедім (https://es.calcuworld.com/calculadoras-matematicas/potencias/) және бұл маған берген нәтиже болды.
        Иә, мен бұған дейін bc пәрменін қолданып көрдім, және ол маған сіз жазған мәнді береді.

  16.   Тиририри дижо

    Сәлем, қайтадан сілтеме жасайтын сурет.h кітапханасы өте кішкентай және оны оқуға болмайды (ең болмағанда мен оны оқи алмадым, өйткені мен бәрінің оқығанын көремін), ал мен оны түсінбейтіндіктен, әрі қарай жалғастырмаймын оқу. Сіз оны өзгерте алар-алмайтыныңызды білмеймін, мен сізді осымен мазаламадым деп үміттенемін.

    1.    ChrisADR дижо

      Сіз мобильді нұсқасын байқап көре аласыз, олар біршама айқын көрінеді, бұл wordpress тақырыбы: / екінші жағынан, барлық C тақырыпшаларын / usr / include / -тен табуға болады, бұл жағдайда сіз оны тікелей оқуды таңдай аласыз, егер сіз оңайырақ helps Үлкенірек суретті жүктеуге тырысамын, егер бұл көмектесе ме, жоқ па?

      1.    Тиририри дижо

        Рахмет, мен бұған шыдамды болуым керек деп ойлаймын, хе хе.

  17.   Катеко дижо

    Мақалаңызға рахмет, өйткені мен қазір тілдің айнымалылығы мен ұсынылу ауқымын жақсырақ түсіндім, бірақ енді «stdint.h» кітапханасын қолдануды бастау керек деп ойлаймын, өйткені олар оны c-дан бастап программалау кезінде қолдануға кеңес береді. Мені ескі мектепте оқыды, өйткені есте сақтау өте құнды болды, сондықтан пайдаланылған нәрсеге мұқият болу керек еді

    1.    ChrisADR дижо

      Katekyo-ға ешқандай себеп жоқ, стандартты кітапхананы қолданған дұрыс, дегенмен uint_least8_t-ті uint_fast8_t-ден не ажырататынын және мақсат болған алғашқы деректер түрлерін білу арқылы болатынын білген дұрыс деп сендіре аламын. Посттың хабарламасы 🙂 Пікір үшін және мақаланы оқығаныңыз үшін, құттықтауларыңыз үшін үлкен рахмет

  18.   Виктор дижо

    : Немесе шебер түсіндірме! Мен тұжырымдамалардың бір бөлігін білетінмін, бірақ осы посттан көптеген жаңа білім аламын

    1.    ChrisADR дижо

      Викторға көп рахмет 🙂 мақаланың көмегі, сәлемдесуі қандай жақсы

  19.   Гиль дижо

    Маған Python бағдарламалауды жеңілдету өте ұнады, мен курсты көрдім http://zetcode.com/gui/pyqt4/ Маған соңғы тетрис ұнады: http://zetcode.com/gui/pyqt4/thetetrisgame/
    Мен жазда осы тетриске ұпай, көп ойыншы және музыка қою үшін біртіндеп, бірақ өте көңілді болдым.

    1.    ChrisADR дижо

      Сәлеметсіз бе, Гуилла, сіз жұмыс істеп жатқан бағдарламалық жасақтаманың біртіндеп өсіп келе жатқанын көру өте қызықты, 🙂 бұл теңдесі жоқ тәжірибе, және одан да көп нәрсе сіздің дамып келе жатқан нәрсеңізді, яғни басқа әлемнен тапқан кезде, sharing бөліскеніңізге көп рахмет 🙂

      1.    Гиль дижо

        Мен жасағанды ​​(музыка үшін 30Мб) жүктедім http://guillermo.molleda.com/Tetris9.7z
        Сіз әр ойыншы үшін әр түрлі бастапқы жылдамдықты конфигурациялауыңыз керек немесе егер сіз жаңа ойыннан кейін ұпайларды қайта қоссаңыз ..., және менің екі қызымның менімен ойнауы үшін үш ойыншы бар. Бұл тіпті тәуелділікті тудырады.