32-බිට් යන්ත්‍රවලට 2 ^ 32 දක්වා සංඛ්‍යා පමණක් හැසිරවිය හැකි නම්, මගේ යන්ත්‍රය බිඳ වැටීමකින් තොරව මට 1000000000000 (ට්‍රිලියන) ලිවිය හැක්කේ ඇයි?


370

32-බිට් පරිගණකවලට අත්සන් කළ පූර්ණ සංඛ්‍යා 2 31 - 1 දක්වා පමණක් ගබඩා කළ හැකිය .
මේ නිසා අප IPv4 ලිපින අවසන් වී 64-බිට් 64 යුගයට පිවිස ඇත.

කෙසේ වෙතත්, අංක 2 31 - 1 (2,147,483,647) අංක 1 ට්‍රිලියන (1,000,000,000,000) තරම් විශාල නොවේ, මගේ යන්ත්‍රය බිඳ වැටීමෙන් තොරව දඩ පෙන්වීමට මට හැකි බව පෙනේ.

මෙය සිදුවීමට හේතුව යමෙකුට පැහැදිලි කළ හැකිද?


35
ප්‍රශ්නය දෝෂ සහිතය. 32-බිට් යන්ත්‍රවලට 2 ^ 32 ට වඩා විශාල සංඛ්‍යාවක් හැසිරවිය හැකිය. ඔවුන් 'දිගු' යනාදිය සමඟ එය නිතරම කරති. ඔවුන්ට එක් ලේඛනයක 2 ^ 32 දක්වා පමණක් ගබඩා කළ හැකි නමුත් මෘදුකාංගය ලියා ඇත්තේ මෙම ගැටළුව මඟහරවා ගැනීම සඳහා ය. සමහර නූතන භාෂාවන්ට දී ඇති සංඛ්‍යාවක දිග පිළිබඳ ගැටලුවක් නොමැත.
JFA

23
කරුණාකර මාතෘකාව පිළිබඳ අදහස්, ආචාරශීලී සහ ප්‍රශ්නයේ තාක්ෂණික අංශවලට අදාළ අදහස් දක්වන්න. විහිළු අදහස් 50 කට ආසන්න ප්‍රමාණයක් දැනටමත් ඉවත් කිරීමට සිදු වූ අතර, අපි පෝස්ට් එක අගුළු දැමීමෙන් වැළකී සිටීමට කැමැත්තෙමු. ඔබට ස්තුතියි.
nhinkle

6
මෙම ප්‍රශ්නය ලියා ඇත්තේ තරමක් අලස වන අයුරිනි. 1000000000000 අංකය "ලිවීම" සහ "දර්ශනය කිරීම" යන්නෙන් ඔබ අදහස් කරන්නේ කුමක්ද? ඔබ 1000000000000 අංකය ලිවූ ප්‍රශ්නය සහ ඔබේ වෙබ් බ්‍රව්සරය එය මනාව ප්‍රදර්ශනය කරන විට, මම සිතමි, නමුත් මීට පෙර පරිගණකයක් භාවිතා කර ඇති ඕනෑම කෙනෙකුට මෙය අමුතු දෙයක් නොවිය යුතුය. ප්රශ්නය නොමිලේ අර්ථ නිරූපණය ඉල්ලා සිටී.
HelloGoodbye

7
මිනිස් වි ness ානය බිටු 50 ක් පමණ ඇතැයි ගණන් බලා ඇත (මම කොහේ හරි කියෙව්වා). එබැවින් ප්‍රශ්නය " 10^9මගේ පරිගණකය බිඳ වැටීමකින් තොරව ලිවිය හැක්කේ කෙසේද ?" ඒ වෙනුවට " 10^(18)මගේ මොළය බිඳ වැටීමකින් තොරව ලිවිය හැක්කේ කෙසේද ?"
හේගන් වොන් එයිට්සන්

1
බිට් 32 පරිගණක සඳහා UNSIGNED නිඛිල 2 ^ 32 - 1 දක්වා පමණක් ගබඩා කළ හැකිය. 2 ^ 32 - 1 පවා 2,147,483,647 ට සමාන නොවේ ... ඉහළ ඡන්ද 300 ක් සහ කිසිවෙකු මෙය වටහා ගත්තේ නැද්ද?
කෝරේ ටුගෙයි

Answers:


786

මම ඔබේ ප්‍රශ්නයට පිළිතුරු සපයන්නේ ඔබෙන් වෙනත් එකක් අසමින්:

ඔබේ ඇඟිලි 6 ට ගණන් කරන්නේ කෙසේද?

ඔබ එක් අතකින් කළ හැකි විශාලතම සංඛ්‍යාව දක්වා ගණන් කළ හැකි අතර, ඔබ ඇඟිලි ඉවර වූ විට ඔබේ දෙවන අත දෙසට ගමන් කරයි. පරිගණක එකම දේ කරයි, එක් ලේඛනයකට වඩා විශාල අගයක් නිරූපණය කිරීමට අවශ්‍ය නම් ඔවුන් දත්ත සමඟ වැඩ කිරීම සඳහා 32bit බ්ලොක් කිහිපයක් භාවිතා කරනු ඇත.


16
විනෝදජනක, කේත නාමය. එසේනම් ඔබ ඔබේ ඇඟිලි 32 ක් හෝ ඊට වැඩි ගණනක් ගණනය කරන්නේ කෙසේද (එනම් 2 ^ 5 අවසන් වූ පසු)? ;) කෙනෙකුගේ අනෙක් අතට ගමන් කිරීමේ ප්‍රතිසමය හොඳයි ... ද්විමය ප්‍රමාද වුව ද කෙනෙකුගේ අනෙක් අතට ගමන් කිරීමේ අවශ්‍යතාවය. මා දැකීමට කැමති දෙය නම්, ද්විමය වශයෙන් තවදුරටත් ගණනය කිරීම සඳහා යමෙකුගේ ඇඟිලි තුඩුවලට ගමන් කිරීම සඳහා පාදයේ දක්‍ෂතාවයෙන් 1,024 ක් හෝ ඊට වැඩි ගණනක් ගණන් කිරීමයි - 1,048,575 දක්වා! :) එය දියණියන්ගේ බලයෙන් බිටු 20 ක් විය හැකිය. : P
J0e3gan

14
කරුණාකර මාතෘකාව පිළිබඳ අදහස් තබා ගන්න සහ මෙම පිළිතුරේ තාක්ෂණික කරුණු සාකච්ඡා කිරීමට අදාළ වේ. මෙම පිළිතුරෙන් විහිළු අදහස් 60 කට වඩා දැනටමත් මකා දමා ඇති අතර, පෝස්ට් අගුළු දැමීමෙන් වැළකී සිටීමට අපි කැමැත්තෙමු.
nhinkle

@ කේත නාමය- පහසුය, ඔබ එක් ඇඟිල්ලක් සිරස් දර්ශකයක් ලෙස පවරයි. ඔබ ඇඟිලි ඉවර වූ පසු, ඔබ එම මුදල තොගයට එකතු කර ගණන් කිරීම නැවත ආරම්භ කරන්න.
මකාච්

Od කේත නාමය ඔබ එය ඉගෙනගත්තේ කොහෙන්ද? මම මෙය මුලින් ඇසුවේ ෆ්‍රෙඩ්රික් පොල්ගෙන්
Zane

2
මම හිතන්නේ මෙය අදාළ ප්‍රශ්නයට පිළිතුර නොවේ. @ Bigbio2002 හි පිළිතුර නිවැරදි ය. මෙහි "1000000000000" යනු "adsfjhekgnoregrebgoregnkevnregj" වැනි අංකයක් නොව පෙළකි. ඔබ පවසන දේ සත්‍ය ය, නමුත් මෙය නිවැරදි පිළිතුර නොවන බව මට තදින්ම දැනේ. බොහෝ උඩු යටිකුරු දැකීමට ...
මාස්ටර් චීෆ්

396

32-බිටු නිඛිලයකට 2 ^ 32-1 ට වඩා වැඩි අගයක් තබා ගත නොහැකි බව ඔබ නිවැරදිය. කෙසේ වෙතත්, මෙම 32-බිටු නිඛිලයේ වටිනාකම සහ එය ඔබගේ තිරය මත දිස්වන ආකාරය සම්පූර්ණයෙන්ම වෙනස් කරුණු දෙකකි. "1000000000000" යන මුද්‍රිත නූල මතකයේ 32-බිටු නිඛිලයකින් නිරූපණය නොවේ.

"1000000000000" අංකය වචනාර්ථයෙන් පෙන්වීමට මතක බයිට් 13 ක් අවශ්‍ය වේ. එක් එක් බයිටයට 255 ක් දක්වා අගයක් තබා ගත හැකිය. ඔවුන්ගෙන් කිසිවෙකුට සම්පූර්ණ, සංඛ්‍යාත්මක අගය රඳවා තබා ගත නොහැක, නමුත් ASCII අක්ෂර ලෙස තනි තනිව අර්ථ නිරූපණය කළ හැකිය (නිදසුනක් ලෙස, ' 0' අක්ෂරය දශම අගය 48, ද්විමය අගය මගින් නිරූපණය කෙරේ 00110000), ඔවුන්ට හැකිය මිනිසෙකු වන ඔබට අර්ථවත් වන ආකෘතියකට එකට බැඳ තබන්න.


වැඩසටහන් තුළ පිළිබඳ සංකල්පය වේ typecasting පරිගණක යම් විෂය ධාරාව අර්ථ ආකාරය වන, 0න සහ 1s. ඉහත උදාහරණයේ දී මෙන් එය සංඛ්‍යාත්මක අගයක්, චරිතයක් හෝ වෙනත් දෙයක් ලෙස මුළුමනින්ම අර්ථ දැක්විය හැකිය. බිටු 32 ක පූර්ණ සංඛ්‍යාවක් 1000000000000 ක අගයක් රඳවා ගැනීමට නොහැකි විය හැකි නමුත්, සම්පූර්ණයෙන්ම වෙනස් අර්ථකථනයක් භාවිතා කරමින් බිට් 32 පාවෙන ලක්ෂ්‍ය අංකයකට හැකි වේ.

පරිගණකයට අභ්‍යන්තරව විශාල සංඛ්‍යාවක් සමඟ ක්‍රියා කළ හැකි ආකාරය සහ සැකසීමට හැකි නම්, බිට් 64 නිඛිල සංඛ්‍යාවක් (බිලියන බිලියන 16 ක් දක්වා වටිනාකම් වලට ඉඩ දිය හැකි), පාවෙන ලක්ෂ්‍ය අගයන් මෙන්ම අත්තනෝමතික ලෙස විශාල සමඟ වැඩ කළ හැකි විශේෂිත පුස්තකාල තිබේ. අංක.


22
ඇත්ත වශයෙන්ම එය බොහෝ දුරට නිවැරදි නමුත් තරමක් නොවේ. ලක්ෂ 32 ක පාවෙන ලක්ෂ්‍ය අංකයකට 1000000000000 නිවැරදිව නිරූපණය කිරීමට හැකියාවක් නැත. එය අපේක්ෂිත අංකයට ඉතා ආසන්න සංඛ්‍යාවක් නිරූපණය කරන නමුත් එය හරියටම නොවේ.
ටිම් බී

6
ImTimB: දශම 32 ආකෘතිය ගැන ඔබ අසා තිබේද? එය IEEE 754-2008 ප්‍රමිතියේ කොටසකි. මෙම ආකෘතිය මෙම අංකය නිවැරදිව නිරූපණය කිරීමේ හැකියාව ඇත :)
VX

15
ඇත්ත, එය කළ හැකිය. කෙසේ වෙතත් මිනිසුන් "ෆ්ලෝට්" යැයි කියන විට අදහස් කරන ආකෘතිය එය නොවේ, එය සාමාන්‍යයෙන් වර්තමාන පරිගණකවල සම්මත පාවෙන ලක්ෂ්‍ය සකසනයන් විසින් ගබඩා කර භාවිතා කරන 32bit පාවෙන ලක්ෂ්‍ය අංකයක් අදහස් කරයි.
ටිම් බී

2
ImTimB ඇත්ත වශයෙන්ම. Float32 ලෙස නිරූපණය කළ හැකි ආසන්නතම අංකය 999999995904
greggo

4
ImTimB: නමුත් 64-bit පාවෙන ලක්ෂ්‍ය අංකයකට පහසුවෙන් 1000000000000හරියටම නිරූපණය කළ හැකිය . එය 10 ^ 12, හෝ 2 ^ 12 * 5 ^ 12; 5 ^ 12 ට මැන්ටිස්සා බිටු 28 ක් අවශ්‍ය වේ.
කීත් තොම්සන්

190

පළමුවෙන්ම හා ප්‍රධාන වශයෙන්, බිට් 32 පරිගණකවලට තනි යන්ත්‍ර වචනයකින් 2³²-1 දක්වා සංඛ්‍යා ගබඩා කළ හැකිය . යන්ත්‍ර වචනය යනු CPU හට ස්වභාවික ආකාරයකින් සැකසිය හැකි දත්ත ප්‍රමාණයයි (එනම්, එම ප්‍රමාණයේ දත්තවල මෙහෙයුම් දෘඩාංග තුළ ක්‍රියාත්මක වන අතර ඒවා සාමාන්‍යයෙන් වේගවත්ම වේ). 32-බිට් CPUs බිටු 32 කින් සමන්විත වචන භාවිතා කරයි, එබැවින් ඔවුන්ට 0 සිට 2³²-1 දක්වා සංඛ්‍යා එක වචනයකින් ගබඩා කළ හැකිය .

දෙවනුව, ට්‍රිලියන 1 ක් සහ 1000000000000 යනු වෙනස් කරුණු දෙකකි.

  • ට්‍රිලියන 1 යනු සංඛ්‍යා පිළිබඳ වියුක්ත සංකල්පයකි
  • 1000000000000 යනු පෙළ ය

1එක් වරක් සහ 012 වතාවක් එබීමෙන් ඔබ පෙළ ටයිප් කරයි. 1යෙදවුම් 1, 0යෙදවුම් 0. බලන්න? ඔබ අක්ෂර ටයිප් කරයි. අක්ෂර සංඛ්‍යා නොවේ. යතුරු ලියනය කරන්නන්ට කිසිසේත්ම CPU හෝ මතකයක් නොතිබූ අතර ඔවුන් එවැනි “සංඛ්‍යා” ඉතා හොඳින් හසුරුවනු ලැබුවේ එය හුදෙක් පෙළ නිසා ය.

1000000000000 යනු අංකයක් නොවන බවට සාධනය , නමුත් පෙළ: එහි අර්ථය ට්‍රිලියන 1 ක් (දශමයෙන්), 4096 (ද්විමය වශයෙන්) හෝ 281474976710656 (ෂඩාස්රාකාරයෙන්) ය. එය විවිධ පද්ධතිවල ඊටත් වඩා අර්ථයන් ඇත. 1000000000000 යන්නෙහි තේරුම අංකයක් වන අතර එය ගබඩා කිරීම වෙනස් කතාවකි (අපි එය මොහොතකින් නැවත ලබා ගනිමු).

පා store ය ගබඩා කිරීම සඳහා (ක්‍රමලේඛනයේදී එය නූල් ලෙස හැඳින්වේ ) 1000000000000 ඔබට බයිට් 14 ක් අවශ්‍ය වේ (එක් එක් අක්ෂර සඳහා එකක් සහ අවසන් වන NULL බයිට් යන්නෙහි මූලික අර්ථය “නූල මෙතැනින් අවසන් වේ”). එය යන්ත්‍ර වචන 4 කි. තුනහමාරක් ප්‍රමාණවත් වනු ඇත, නමුත් මා කී පරිදි, යන්ත්‍ර වචන මත මෙහෙයුම් වේගවත් වේ. පෙළ ගබඩා කිරීම සඳහා ASCII භාවිතා කර ඇතැයි උපකල්පනය කරමු , එබැවින් මතකයේ හැටියට මෙය පෙනෙනු ඇත: (ASCII කේත අනුරූප 0හා 1ද්විමය බවට පරිවර්තනය කිරීම, සෑම වචනයක්ම වෙනම පේළියකින්)

00110001 00110000 00110000 00110000
00110000 00110000 00110000 00110000
00110000 00110000 00110000 00110000
00110000 00000000 00000000 00000000

අක්ෂර හතරක් එක් වචනයකට ගැලපේ, ඉතිරි කොටස ඊළඟ වචනයට ගෙන යයි. සෑම දෙයක්ම (පළමු NULL බයිට් ද ඇතුළුව) ගැලපෙන තෙක් ඉතිරි කොටස ඊළඟ වචනයට ගෙන යනු ලැබේ.

දැන්, අංක ගබඩා කිරීමට ආපසු යන්න. එය පිරී ඉතිරී යන පෙළ මෙන් ක්‍රියා කරයි, නමුත් ඒවා දකුණේ සිට වමට සවි කර ඇත. එය සංකීර්ණ බවක් පෙනෙන්නට ඇත, එබැවින් මෙන්න උදාහරණයක්. සරල බව සඳහා අපි එය උපකල්පනය කරමු:

  • අපගේ මන imag කල්පිත පරිගණකය ද්විමය වෙනුවට දශම භාවිතා කරයි
  • එක් බයිටයකට සංඛ්‍යා රඳවා ගත හැකිය 0..9
  • එක් වචනයක් බයිට් දෙකකින් සමන්විත වේ

මෙන්න වචන 2 ක හිස් මතකයක්:

0 0
0 0

අපි අංක 4 ගබඩා කරමු:

0 4
0 0

දැන් අපි 9 එකතු කරමු:

1 3
0 0

ඔපෙරන්ඩ් දෙකම එක් බයිටයකට ගැලපෙන බව සලකන්න, නමුත් ප්‍රති .ලය නොවේ. නමුත් අපට තවත් එකක් භාවිතා කිරීමට සූදානම්. දැන් අපි 99 ගබඩා කරමු:

9 9
0 0

නැවතත්, අපි අංකය ගබඩා කිරීම සඳහා දෙවන බයිට් භාවිතා කර ඇත්තෙමු. අපි 1 එකතු කරමු:

0 0
0 0

අපොයි ... එය පූර්ණ සංඛ්‍යා පිටාර ගැලීම ලෙස හඳුන්වන අතර බොහෝ බරපතල ගැටළු වලට හේතුවකි, සමහර විට ඉතා මිල අධිකය .

නමුත් පිටාර ගැලීම සිදුවනු ඇතැයි අපි අපේක්ෂා කරන්නේ නම්, අපට මෙය කළ හැකිය:

0 0
9 9

දැන් 1 එකතු කරන්න:

0 1
0 0

ඔබ බයිට් වෙන් කරන අවකාශ සහ නව රේඛා ඉවත් කළහොත් එය වඩාත් පැහැදිලි වේ:

0099    | +1
0100

පිටාර ගැලීම සිදුවිය හැකි බවට අපි පුරෝකථනය කර ඇති අතර අපට අමතර මතකයක් අවශ්‍ය විය හැකිය. මේ ආකාරයට සංඛ්‍යා හැසිරවීම තනි වචනවලට ගැලපෙන සංඛ්‍යා තරම් වේගවත් නොවන අතර එය මෘදුකාංග තුළ ක්‍රියාත්මක කළ යුතුය. 32-බිට්-සීපීයූ සඳහා 32-බිට්-වචන අංක සඳහා සහය එක් කිරීමෙන් එය 64-බිට් සීපීයූ එකක් බවට පත් කරයි (දැන් එය ස්වදේශීයව බිට් 64 අංක මත ක්‍රියා කළ හැකිය, නේද?).

මා ඉහත විස්තර කර ඇති සෑම දෙයක්ම ද්වි-මතක බයිට් 8 ක් සහ බයිට් 4 ක් සහිත වචන වලට අදාළ වේ, එය බොහෝ දුරට එකම ආකාරයකින් ක්‍රියා කරයි:

00000000 00000000 00000000 00000000 11111111 11111111 11111111 11111111    | +1
00000000 00000000 00000000 00000001 00000000 00000000 00000000 00000000

එවැනි සංඛ්‍යා දශම පද්ධතියට පරිවර්තනය කිරීම උපක්‍රමශීලී ය. (නමුත් එය ෂඩාස්රාකාර සමඟ හොඳින් ක්‍රියා කරයි )


21
ඔබේ පිළිතුර කියවන්නේ තරමක් සංක්ෂිප්තව ය. OP පැහැදිලිවම අංකය ගැන කතා කරයි, පෙළ නොවේ : large as the number 1 trillion (1000000000000). එසේම, ඔබ බොහෝ දුරට කතා කරන්නේ අත්තනෝමතික-නිරවද්‍ය ගණිතය ගැන ය , නමුත් ඔබ කිසි විටෙකත් ඔබ පවසන දේ සඳහා කිසිදු නියමයක් සඳහන් නොකරයි ....
මිරර්ඩ්ෆේට්

12
"ට්‍රිලියන 1" ද
නූලකි

3
L එල්සෝවළුගි එය. සංඛ්‍යාවක් නිරූපණය කරන නූලට වඩා වියුක්ත අංක සංකල්පය ඉදිරිපත් කිරීමට මට යම් ක්‍රමයක් සොයා ගැනීමට සිදු විය. "ට්‍රිලියන 1" එය කිරීමට වඩා හොඳ හා අඩු අපැහැදිලි ක්‍රමයක් බව මම විශ්වාස කරමි (පිළිතුරෙහි ඇති සාක්ෂි බලන්න).
gronostaj

26
Ir මිරර්ඩ්ෆේට් 'මම පැහැදිලිවම අංකය ගැන කතා කරනවා' සමග එකඟ නොවෙමි. විශ්රාම වැටුප් පැහැදිලිව වන 'යහපත් ප්රදර්ශනය' පවසයි ඇත ... මට පෙළ '1000000000000' ගැන කතා
ජෝ

4
@yannbane 'A' යනු චරිතයක් මිස අංකයක් නොවේ. '?' චරිතයක් මිස අංකයක් නොවේ. '1' යනු චරිතයක් මිස අංකයක් නොවේ. චරිත යනු සංකේත පමණි. ඔවුන්ට ඉලක්කම් හෝ සංඛ්‍යා නිරූපණය කළ හැකි නමුත් නියත වශයෙන්ම ඒවා සංඛ්‍යා නොවේ. '1' යන්නට එකක්, දහයක්, සියයක්, දහසක් සහ තවත් බොහෝ දේ සඳහා පෙනී සිටිය හැකිය, එය ඉලක්කයක් හෝ එහි කොටසක් විය හැකි සංකේතයක් පමණි. '10' (අක්ෂර මාලාව) යන්නෙන් දෙකක් හෝ අටක් හෝ දහයක් හෝ දහසය වැනි දේ අදහස් විය හැකි නමුත් ඔබ ඇපල් දහයක් ඇති බව පැවසූ විට, ඔබ අංක දහයක් භාවිතා කරන අතර ඔබ අදහස් කරන්නේ කුමක්දැයි සියලු දෙනා දනිති. අක්ෂර සහ සංඛ්‍යා අතර විශාල වෙනසක් ඇත.
gronostaj

40

ඔබ ද ලිවීමට හැකි "මෙය ප්රකාශය අසත්ය" අවම වශයෙන් දක්වා විශාල සංඛ්යාවක් එය හුදෙක් සරල පෙළ බව, එයින් ගම්ය ඔබේ පරිගණකය නැවතුනේ තොරව ස්කොට් පිළිතුර ඇතැම් ගණනය රාමුව සඳහා ස්ථානයේදීම මත ය @ :), නමුත් "ලියන" ඔබේ ප්රශ්නය එය අර්ථ නිරූපණය කෙරේ.

සංස්කරණය කරන්න: දැන් උපහාසයෙන් අඩු සංඛ්‍යාවක් සමඟ විවිධ ක්‍රම පිළිබඳ ප්‍රයෝජනවත් තොරතුරු සංඛ්‍යාවක් මතකයේ ගබඩා කළ හැකිය. මම මේවා ඉහළ සාරාංශයක් සමඟ විස්තර කරමි, එනම් නවීන ක්‍රමලේඛකයෙකු එය ක්‍රියාත්මක කිරීම සඳහා යන්ත්‍ර කේතයට පරිවර්තනය කිරීමට පෙර කේත ලිවීමට ඉඩ ඇත.

පරිගණකයක දත්ත එක්තරා වර්ගයකට සීමා කළ යුතු අතර , එවැනි වර්ගයක පරිගණක අර්ථ දැක්වීමක් මඟින් මෙම දත්ත මත සිදු කළ හැකි මෙහෙයුම් මොනවාද සහ කෙසේද යන්න විස්තර කරයි (එනම් සංඛ්‍යා සංසන්දනය කිරීම, සංයුක්ත පෙළ හෝ XOR බූලියන්). ඔබට පෙළකට සංඛ්‍යාවක් ගුණ කළ නොහැකි සේම ඔබට අංකයකට පෙළ එක් කළ නොහැක, එවිට මෙම අගයන් සමහරක් වර්ග අතර පරිවර්තනය කළ හැකිය.

අත්සන් නොකළ පූර්ණ සංඛ්‍යා සමඟ ආරම්භ කරමු . මෙම අගය වර්ග වලදී, සියලු බිටු ඉලක්කම් පිළිබඳ තොරතුරු ගබඩා කිරීමට භාවිතා කරයි; ඔබේ අ උදාහරණයක් 32-bit නිලකුණු පූර්ණ සංඛ්යාමය ඕනෑම අගය එහිදී 0කිරීමට 2^32-1ගබඩා කර තැබිය හැක. ඔව්, භාවිතා කළ වේදිකාවේ භාෂාව හෝ ගෘහ නිර්මාණ ශිල්පය අනුව ඔබට බිට් 16 නිඛිල හෝ බිට් 256 පූර්ණ සංඛ්‍යාවක් තිබිය හැකිය.

ඔබට negative ණාත්මක වීමට අවශ්‍ය නම් කුමක් කළ යුතුද? බුද්ධිමත්ව, අත්සන් කළ පූර්ණ සංඛ්‍යා යනු ක්‍රීඩාවේ නමයි. සමුළුව සියලු වටිනාකම් වෙන් කිරීමට -2^(n-1)කිරීමට 2^(n-1)-1අප ලිවූ ක්රම දෙකක් සමග ගනුදෙනු කිරීමට ඇති වන සංකූලතා ඇතිවීම වලක්වනු මේ ආකාරයට - +0හා -0. එබැවින් බිට් 32 අත්සන් කළ පූර්ණ සංඛ්‍යාවක් සිට අගයක් -2147483648දරයි 2147483647. පිළිවෙලට, එසේ නොවේ ද?

හරි, අපි දශම සංරචකයක් නොමැති සංඛ්‍යා වන පූර්ණ සංඛ්‍යා ආවරණය කර ඇත්තෙමු. මෙම ප්රකාශ නොකියා: පූර්ණ සංඛ්යාව නොවන කොටසක් සිතට පමණක් අතර කොහේ හරි විය හැකි 0හා 11/8 1/2, 1/4, ... ගැටලුව වන්නේ, ඔබ: සෑම අමතර ටිකක් එහි නිරවද්යතාව වැඩි වනු ඇතැයි විස්තර කිරීමට භාවිතා නිසා, සරල හරයක් දශමයක සංඛ්‍යා 0.1ලෙස නිශ්චිතව ප්‍රකාශ කළ නොහැක . පූර්ණ සංඛ්‍යාවක් ලෙස අංකය ගබඩා කිරීම වඩා පහසු නොවනු ඇත, නමුත් ඒ වෙනුවට රේඩික්ස් (දශම) ලක්ෂ්‍යය තැබීමට එකඟ වන්නේද? මෙය ස්ථාවර ලක්ෂ්‍ය අංක ලෙස හැඳින්වේ , එහිදී අපි ගබඩා කර තබන 1234100නමුත් 1234.100ඒ වෙනුවට කියවීමට සම්මුතියකට එකඟ වෙමු .

ගණනය කිරීම් සඳහා භාවිතා කරන සාපේක්ෂව වඩාත් පොදු වර්ගයකි floating point. එය ක්‍රියා කරන ආකාරය සැබවින්ම පිළිවෙලට ඇත, එය සං value ා අගය ගබඩා කිරීම සඳහා එක් බිට් එකක් භාවිතා කරයි, පසුව සමහරක් on ාතීය හා වැදගත්කම ගබඩා කිරීමට භාවිතා කරයි. එවැනි ප්‍රතිපාදන නිර්වචනය කරන ප්‍රමිතීන් ඇත, නමුත් බිටු 32 ක පාවීමක් සඳහා ඔබට ගබඩා කළ හැකි උපරිම සංඛ්‍යාව අති විශාලය

(2 - 2^-23) * 2^(2^7 - 1) ≈ 3.4 * 10^38

කෙසේ වෙතත් මෙය පැමිණෙන්නේ නිරවද්‍යතාවයේ පිරිවැයෙනි. බ්‍රව්සර්වල ඇති ජාවාස්ක්‍රිප්ට් බිට් 64 පාවෙන භාවිතා කරන අතර එයට තවමත් දේවල් නිවැරදිව ලබා ගත නොහැක. ලිපින තීරුවට මෙය පිටපත් කර enter ඔබන්න. ස්පොයිලර් සීරුවෙන්: ප්රතිඵලය වන්නේ නැහැ වීමට යන්නේ 0.3.

javascript:alert(0.1+0.2);

BigIntegerන්‍යායාත්මකව ඉහළ හෝ පහළ සීමාවන් නොමැති සහ "කණ්ඩායම්" වලින් ගණනය කළ යුතු මයික්‍රොසොෆ්ට් .නෙට් 4.5 වැනි තවත් විකල්ප වර්ග තිබේ; නමුත් සමහර විට වඩාත් සිත්ගන්නාසුලු තාක්ෂණයන් වන්නේ ගණිතය තේරුම් ගන්නා , වුල්ෆ්රාම් ගණිතමය එන්ජිම වැනි, අනන්තය වැනි වියුක්ත අගයන් සමඟ හරියටම ක්‍රියා කළ හැකි ය .


9
මෙම යථාර්ථය තුළ ඔබට එය කළ හැකිය . ස්ටාර් ට්‍රේක් විශ්වයේ එය කිරීමට උත්සාහ කරන්න. සියලු ගිනි අවුලුවලින් හා දුම නිසා පෙර සිටගෙන සිටින්න.
මයිකල් පෙට්‍රෝටා

ස්ථාවර ලක්ෂ්‍යය ක්‍රියා කරන්නේ හරියටම නොවේ. එය සැබවින්ම දශම ලක්ෂ්‍යය නිපදවීම සඳහා සංඛ්‍යා පරිමාණයෙන් හා පක්ෂග්‍රාහීව පවතින පද්ධතියකි. ඔබේ උදාහරණයේ දී පරිමාණය 1/1000 ක් වන නමුත් ස්ථාවර ලක්ෂ්‍ය සංඛ්‍යා (විශේෂයෙන් පරිගණක ග්‍රැෆික්ස් වල) ද ඇත: 0 = 0.0, 255 = 1.0 - පරිමාණය 1/255 වේ.
ඇන්ඩන් එම්. කෝල්මන්

31

ප්‍රධාන දෙය නම් පරිගණක අංක සංකේතවත් කරන්නේ කෙසේද යන්න තේරුම් ගැනීමයි .

තනි වචනයක් (බිට් 32 පද්ධතියක බයිට් 4 ක්) භාවිතා කරමින් අංකයක සරල ද්විමය නිරූපණයක් භාවිතා කරමින් අංකයක් ගබඩා කිරීමට පරිගණකයක් බල කරන්නේ නම්, බිට් 32 පරිගණකයකට සංඛ්‍යා ගබඩා කළ හැක්කේ 2 ^ 32 දක්වා පමණි. නමුත් සංඛ්‍යා සමඟ කේතනය කිරීමට ඔබට වෙනත් ක්‍රම රාශියක් ඇත.

එක් උදාහරණයක් නම් පරිගණක පාවෙන ලක්ෂ්‍ය සංඛ්‍යා ගබඩා කරන ආකාරයයි. පරිගණක වලට ඒවා කේතනය කිරීම සඳහා විවිධ ක්‍රම රාශියක් භාවිතා කළ හැකිය. සම්මත IEEE 754 2 ^ 32 ට වඩා විශාල සංඛ්‍යා කේතන සඳහා නීති රීති අර්ථ දක්වයි. කුරිරු ලෙස, පරිගණකයට බිට් 32 විවිධ කොටස් වලට බෙදීමෙන් අංකයේ සමහර ඉලක්කම් නියෝජනය කරන අතර අනෙක් බිටු සංඛ්‍යාවේ විශාලත්වය නියෝජනය කරයි (එනම් on ාතීය, 10 ^ x). මෙය වඩා විශාල පරාසයකට ඉඩ දෙයිප්‍රමාණයේ සංඛ්‍යා, නමුත් නිරවද්‍යතාව පාවා දෙයි (බොහෝ අරමුණු සඳහා එය හරි). ඇත්ත වශයෙන්ම පරිගණකයට මෙම කේතීකරණය සඳහා වචන එකකට වඩා භාවිතා කළ හැකි අතර, පවතින කේතීකරණ අංකවල විශාලත්වයේ නිරවද්‍යතාව වැඩි කරයි. IEEE ප්‍රමිතියේ සරල දශම 32 අනුවාදය මගින් දශම සංඛ්‍යා 7 ක නිරවද්‍යතාවයකින් යුත් සංඛ්‍යා සහ විශාලත්වයෙන් 10 ^ 96 ක් දක්වා සංඛ්‍යාවක් ලබා දේ.

ඔබට අමතර නිරවද්‍යතාවය අවශ්‍ය නම් තවත් බොහෝ විකල්ප තිබේ. නිසැකවම ඔබට සීමාවකින් තොරව ඔබේ කේතීකරණයේ තවත් වචන භාවිතා කළ හැකිය (එන්කෝඩ් කරන ලද ආකෘතියට සහ පිටතට පරිවර්තනය කිරීම සඳහා කාර්ය සාධන ද penalty ුවමක් සහිතව වුවද). ඔබට මෙය කළ හැකි එක් ක්‍රමයක් ගවේෂණය කිරීමට අවශ්‍ය නම්, එක්සෙල් සඳහා විශාල විවෘත කේත එකතු කිරීමක් ඇත, එය කේතීකරණ යෝජනා ක්‍රමයක් භාවිතා කරයි. එකතු කිරීම ගැන Xnumbers කැඳවා ගත හැකි වේ මෙතන . කේතය විෂුවල් බේසික් හි ඇති අතර එය වේගවත්ම නොවන නමුත් තේරුම් ගැනීමට සහ වෙනස් කිරීමට පහසුය. පරිගණක මඟින් දිගු සංඛ්‍යා කේතනය කිරීම සාක්ෂාත් කරගන්නේ කෙසේද යන්න ඉගෙන ගැනීමට මෙය හොඳ ක්‍රමයකි. කිසිදු ක්‍රමලේඛන මෙවලම් ස්ථාපනය නොකර ඔබට එක්සෙල් තුළ ඇති ප්‍රති results ල සමඟ සෙල්ලම් කළ හැකිය.


24

ඒ සියල්ල ඔබගේ ප්‍රශ්නයේ ඇත.

ඔබ කැමති ඕනෑම අංකයක් කඩදාසි මත ලිවිය හැකිය . සුදු කඩදාසියක තිත් ට්‍රිලියන ගණනක් ලිවීමට උත්සාහ කරන්න. එය මන්දගාමී හා අකාර්යක්ෂමයි. එම විශාල සංඛ්‍යා නියෝජනය කිරීම සඳහා අපට ඉලක්කම් 10 ක පද්ධතියක් ඇත්තේ එබැවිනි. අපට "මිලියනය", "ට්‍රිලියන" සහ තවත් විශාල සංඛ්‍යා සඳහා නම් තිබේ, එබැවින් ඔබ one one one one one one one one one one one...ශබ්ද නඟා නොකියන්න .

32-බිට් ප්‍රොසෙසර නිර්මාණය කර ඇත්තේ හරියටම ද්විමය ඉලක්කම් 32 ක් දිග මතක කොටස් සමඟ ඉතා ඉක්මණින් හා කාර්යක්ෂමව වැඩ කිරීමටය. නමුත් අපි, මිනිසුන්, සාමාන්‍යයෙන් ඉලක්කම් 10 ක සංඛ්‍යා පද්ධතියක් භාවිතා කරන අතර, පරිගණක ඉලෙක්ට්‍රොනික් බැවින් ද්වි -සංඛ්‍යාංක පද්ධතියක් ( ද්විමය ) භාවිතා කරමු. අංක 32 සහ 64 අංක 2 හි බලයන් වේ. මිලියනයක් සහ ට්‍රිලියනයක් 10 ක බලයන් වේ. උදාහරණයක් ලෙස 65536 ට වඩා මෙම සංඛ්‍යා සමඟ ක්‍රියා කිරීම අපට පහසුය.

අපි විශාල සංඛ්‍යාවක් කඩදාසි මත ලිවීමේදී ඉලක්කම් වලට කැඩෙමු. පරිගණක සංඛ්‍යා විශාල සංඛ්‍යාවක් බවට බිඳ දමයි. අප කැමති ඕනෑම අංකයක් අපට ලිවිය හැකි අතර, අපි ඒවා සැලසුම් කරන්නේ නම් පරිගණක ද එසේ කළ හැකිය.


15

32bit සහ 64bit මතක ලිපින වෙත යොමු වේ. ඔබේ පරිගණක මතකය තැපැල් කාර්යාල පෙට්ටි වැනි ය, සෑම කෙනෙකුම වෙනස් ලිපිනයක් ඇත. CPU (මධ්‍යම සැකසුම් ඒකකය) ඔබේ RAM (සසම්භාවී ප්‍රවේශ මතකය) හි මතක ස්ථාන ඇමතීමට එම ලිපින භාවිතා කරයි. CPU හට හැසිරවිය හැක්කේ 16bit ලිපින පමණක් වන විට, ඔබට භාවිතා කළ හැකි වූයේ 32mb RAM පමණි (එය එකල විශාල බවක් පෙනෙන්නට තිබුණි). 32bit සමඟ එය 4 + gb දක්වා ඉහළ ගියේය (එය එකල විශාල බවක් පෙනෙන්නට තිබුණි). දැන් අපට 64bit ලිපින ඇති බැවින් RAM ටෙරාබයිට් වලට යයි (එය විශාල බව පෙනේ).
කෙසේ වෙතත්, අංක සහ පෙළ ගබඩා කිරීම වැනි දේවල් සඳහා බහුවිධ මතක කොටස් වෙන් කිරීමට වැඩසටහනට හැකි වන අතර, එය වැඩසටහන දක්වා වන අතර එක් එක් ලිපිනයේ ප්‍රමාණයට සම්බන්ධ නොවේ. එබැවින් වැඩසටහනකට CPU ට පැවසිය හැකිය, මම ලිපින කොටස් 10 ක් භාවිතා කර ඉතා විශාල සංඛ්‍යාවක් හෝ අකුරු 10 ක නූලක් හෝ ඕනෑම දෙයක් ගබඩා කරමි.
පැති සටහන: මතක ලිපින පෙන්වා ඇත්තේ “දර්ශකයන්” විසිනි, එබැවින් 32- සහ 64-බිට් අගය යනු මතකයට ප්‍රවේශ වීමට භාවිතා කරන දර්ශකයේ ප්‍රමාණයයි.


2
විස්තර හැර හොඳ පිළිතුරක් - ලිපින අවකාශයේ 16bit ඔබට 64kb, 32mb නොව, 286 වැනි යන්ත්‍ර සඳහා බිට් 24 ලිපින (16mb සඳහා) ලබා දී ඇත. එසේම, බිට් 64 ලිපින සමඟ, ඔබ ටෙරාබයිට් වලින් ඔබ්බට ගොස් ඇත - එක්ස්බයිට් 16 ක් වැනි - ටෙරාබයිට් යනු වර්තමාන පරම්පරාවේ මවු පුවරු / සීපීයූස් විසින් පනවනු ලබන සීමාවන් වටා ය - ලිපිනවල ප්‍රමාණය නොවේ.
ෆිල්

4
32-බිට් යන්නෙන් අදහස් කරන්නේ යන්ත්‍ර වචන ප්‍රමාණය මිස මතක ලිපින නොවේ. ෆිල් සඳහන් කළ පරිදි, 286 බිටු 16 CPU වූ නමුත් මතක ඛණ්ඩනය හරහා ඇමතීම සඳහා බිටු 24 ක් භාවිතා කළේය. x86 CPUs 32-bit, නමුත් 36-bit ලිපින භාවිතා කරන්න. PAE බලන්න .
gronostaj

@gronostaj well x86 386 සිට පෙන්ටියම් දක්වා 32-බිට් ලිපින ඇත.
රුස්ලාන්

ඉහළ නැංවීම මෙහි ඇති එකම නිවැරදි පිළිතුර වන නිසා - 32bit යන්නෙන් අදහස් කරන්නේ 32bit මතක ආමන්ත්‍රණය මිස 32bit අංක ගණිතය නොවේ.
user1207217

@ user1207217: ?? උදාහරණයක් ලෙස ඔබේ තර්කයට අනුව Z80 හෝ 8080 යනු බිට් 16 ප්‍රොසෙසර වේ (බිට් 16 මතක ආමන්ත්‍රණය සහ මතක බස් නිසා)?
pabouk

13

අංකය ප්‍රදර්ශනය කිරීම සිදු කරනුයේ පූර්ණ සංඛ්‍යා නොව තනි අක්ෂර භාවිතා කරමිනි. සංඛ්‍යාවේ සෑම ඉලක්කම්ම වෙනම අක්ෂරයකින් නිරූපණය වන අතර, එහි පූර්ණ අගය අර්ථ දැක්වෙන්නේ භාවිතා කරන කේතන ක්‍රමයෙනි, නිදසුනක් ලෙස 'a'ascii අගය සමඟ නිරූපණය 97වන අතර '1'නිරූපණය කෙරේ 49. මෙහි ascii වගුව පරීක්ෂා කරන්න .
මක්නිසාද යත් 'a' සහ '1' යන දෙකම පෙන්වීම සමාන වේ. ඒවා අක්‍ෂර සාහිත්‍යකරුවන් මිස පූර්ණ සංඛ්‍යා නොවේ. සෑම අක්ෂර අක්ෂරයකම බිට් 32 වේදිකාවේ උපරිම අගය 255 ක් වීමට ඉඩ දී ඇත (එය වේදිකාව මත රඳා පවතී, කෙසේ වෙතත් බිට් 8 වඩාත් පොදු අක්ෂර ප්‍රමාණය), එබැවින් ඒවා කාණ්ඩගත කළ හැකි අතර ඒවා විය හැකිය දර්ශනය වේ. ඔවුන්ට පෙන්විය හැකි වෙනම අක්ෂර කොපමණ ප්‍රමාණයක් ඔබ සතුව ඇති RAM මත රඳා පවතී. ඔබ සතුව RAM බයිට් 1 ක් තිබේ නම් ඔබට එක් අක්ෂරයක් පමණක් ප්‍රදර්ශනය කළ හැකිය, ඔබට 1GB RAM ප්‍රමාණයක් තිබේ නම්, ඔබට අක්ෂර 1024 * 1024 * 1024 හොඳින් පෙන්විය හැකිය (ගණිතය කිරීමට තරම් කම්මැලි).

කෙසේ වෙතත් මෙම සීමාව ගණනය කිරීම් වලට අදාළ වේ, කෙසේ වෙතත් ඔබ IPV4 ප්‍රමිතිය ගැන උනන්දුවක් දක්වන බව මම අනුමාන කරමි. එය මුළුමනින්ම පරිගණක වලට සම්බන්ධ නැතත්bit-size, එය කෙසේ හෝ ප්‍රමිතීන්ට බලපායි. IPV4 ප්‍රමිතිය නිර්මාණය කළ විට, ඔවුන් ip අගයන් 32-bit පූර්ණ සංඛ්‍යා වල ගබඩා කර ඇත. දැන් ඔබ ප්‍රමාණය ලබා දුන් පසු එය සම්මත බවට පත් විය. අන්තර්ජාලය ගැන අප දන්නා සෑම දෙයක්ම ඒ මත රඳා පැවතුනි, පසුව අපි පැවරීම සඳහා IP ලිපින වලින් ඉවතට ගියෙමු. එබැවින් IP ප්‍රමිතිය බිට් 64 ක් ලෙස සංශෝධනය කර ඇත්නම්, ඔබගේ රවුටරය (මෙය නිවැරදි යැයි මම සිතමි) සහ වෙනත් ජාල උපාංග ඇතුළුව සියල්ල ක්‍රියා කිරීම නවත්වනු ඇත. එබැවින් නව ප්‍රමිතියක් නිර්මාණය කළ යුතු අතර, එය බිට් 32 නිඛිලය බිට් 128 සමඟ මාරු කර ඇත. සහ සම්මතයේ ඉතිරි කොටස සකස් කර ඇත. දෘඩාංග නිෂ්පාදකයා මෙම නව ප්‍රමිතියට සහය දක්වන බව ප්‍රකාශ කළ යුතු අතර එය වෛරස් වනු ඇත. එය එතරම් සරල නොවූවත්, මම හිතන්නේ ඔබට මෙහි කාරණය ලැබුණා.

වියාචනය: මෙහි සඳහන් බොහෝ කරුණු මගේ උපකල්පනයට සත්‍ය වේ. එය සරල කිරීම සඳහා මට මෙහි වැදගත් කරුණු මග හැරී ඇත. මම සංඛ්‍යා සමඟ හොඳ නැත, එබැවින් ඉලක්කම් කිහිපයක් මග හැරී තිබිය යුතුය, නමුත් මෙහි මගේ අදහස වන්නේ පරිගණකය බිඳ වැටෙන්නේ නැත්තේ ඇයිද යන්න පිළිබඳ OP හි පිළිතුරට පිළිතුරු සැපයීමයි.


2
මම අවතක්සේරු කර නැත, නමුත් ඔබේ පිළිතුර සමඟ ගැටලු ගණනාවක් තිබේ. 1ASCII හි 0x31 වේ, 0x1 නොවේ. 1 GB = 1024 ^ 3 B. IPv4 wad බිටු 32 CPU හඳුන්වා දීමට පෙර සොයා ගන්නා ලදී, එබැවින් ලිපින බිටු 32 ක පූර්ණ සංඛ්‍යා තුළ ගබඩා කර ඇති බව පැවසීම OP ගේ ප්‍රශ්නයට පටහැනි වේ. අවසාන වශයෙන් IPv6 භාවිතා කරන්නේ බිට් 128 ලිපින මිස 64-බිට් නොවේ.
gronostaj

13

සකසනයන්හි "වචන" ඇත. වෙනස් වචන තිබේ. මිනිසුන් "32 බිට් ප්‍රොසෙසරය" යැයි පැවසූ විට, ඔවුන් බොහෝ දුරට අදහස් කරන්නේ "මතක බස් පළල" යන්නයි. මෙම වචනය විවිධ “ක්ෂේත්‍ර” වලින් සමන්විත වන අතර එය සම්ප්‍රේෂණයට (බිටු 24) සහ පාලනයට (වෙනත් බිටු) අනුරූප වන පරිගණක උප පද්ධති වෙත යොමු වේ. නිශ්චිත සංඛ්‍යා පිළිබඳව මට වැරදියි, අත්පොත් හරහා ඒ ගැන ඔබම සහතික කරගන්න.

සම්පූර්ණයෙන්ම වෙනස් අංගයක් වන්නේ ගණනය කිරීමයි. SSE සහ MMX උපදෙස් කට්ටලවලට පූර්ණ සංඛ්‍යා ගබඩා කළ හැකිය. S ලදායිතාව නැතිවීමකින් තොරව උපරිම දිග වර්තමාන SSE අනුවාදය මත රඳා පවතින නමුත් එය සැමවිටම 64bit ගුණයක් පමණ වේ.

වත්මන් ඔප්ටෙරෝන් ප්‍රොසෙසරයට බිට් 256 ක පුළුල් සංඛ්‍යාවක් හැසිරවිය හැකිය (පූර්ණ සංඛ්‍යා ගැන මට විශ්වාස නැත, නමුත් පාවීම නිසැකවම).

සාරාංශය : (1) බස් පළල ගණනය කිරීමේ පළලට කෙලින්ම සම්බන්ධ නොවේ, (2) වෙනස් වචන පවා (මතක වචනය, ලියාපදිංචි වචනය, බස් වචනය යනාදිය) එකිනෙකට සම්බන්ධ නොවේ, අනෙක් ඒවා 8 හෝ 16 ක් පමණ පොදු බෙදීමක් ඇත. 24. බොහෝ සකසනයන් බිට් 6 වචන පවා භාවිතා කර ඇත (නමුත් එහි ඉතිහාසය).


මුල් පෙන්ටියම් ප්‍රොසෙසරයට බිට් 32 ප්‍රොසෙසරයක් වුවද ඉහළ මතක කලාප පළලක් සඳහා බිට් 64 දත්ත බස් රථයක් තිබූ බව සත්‍ය නොවේ. 8088 යනු බිට් 8 දත්ත බස් රථයක් සහිත බිට් 16 ප්‍රොසෙසරයකි.
doug65536

10

පරිගණක උපාංගයක අරමුණ සාමාන්‍යයෙන් දත්ත පිළිගැනීම, සැකසීම, ගබඩා කිරීම සහ විමෝචනය කිරීමයි. යටින් පවතින දෘඩාංග යනු එම කාර්යයන් හතර ඉටු කිරීමට උපකාරී වන යන්ත්‍රයකි. එයට මෘදුකාංග නොමැති කිසිවක් කළ නොහැක.

මෘදුකාංගය යනු දත්ත පිළිගන්නා ආකාරය, එය සකසන ආකාරය, ගබඩා කරන්නේ කෙසේද සහ එය අන් අයට ලබා දෙන්නේ කෙසේද යන්න යන්ත්‍රයට පවසන කේතයයි.

යටින් පවතින දෘඩාංග සෑම විටම සීමාවන් ඇත. බිට් 32 යන්ත්‍රයක් සම්බන්ධයෙන් ගත් කල, දත්ත සැකසෙන බොහෝ ලේඛණ පළල බිටු 32 ක් පමණි. මෙයින් අදහස් කරන්නේ, යන්ත්‍රයට 2 ^ 32 ට වැඩි සංඛ්‍යාවක් හැසිරවිය නොහැකි බව නොවේ, එයින් අදහස් කරන්නේ ඔබට විශාල සංඛ්‍යා සමඟ ගනුදෙනු කිරීමට අවශ්‍ය නම්, එය පිළිගැනීමට, සැකසීමට, ගබඩා කිරීමට යන්ත්‍රයට එක චක්‍රයකට වඩා ගත විය හැකි බවයි. එය හෝ විමෝචනය කරන්න.

මෘදුකාංගය අංක හැසිරවිය යුතු ආකාරය යන්ත්‍රයට කියයි. මෘදුකාංගය විශාල සංඛ්‍යාවක් හැසිරවීමට නිර්මාණය කර ඇත්නම්, එය විශාල සංඛ්‍යා හැසිරවිය යුතු ආකාරය පවසන උපදෙස් මාලාවක් CPU වෙත යවයි. උදාහරණයක් ලෙස, ඔබේ අංකය බිට් 32 රෙජිස්ටර් දෙකකින් නිරූපණය කළ හැකිය. ඔබේ අංකයට 1,234 ක් එකතු කිරීමට ඔබට අවශ්‍ය නම්, මෘදුකාංගය මුලින් පහළ ලේඛනයට 1,234 ක් එකතු කරන ලෙස CPU ට පවසනු ඇත, පසුව පිටාර ගැලීම පරීක්ෂා කර එම එකතු කිරීම නිසා පහළ ලේඛනයට විශාල සංඛ්‍යාවක් ලැබේදැයි බලන්න. එය එසේ වූයේ නම්, එය ඉහළ ලේඛනයට 1 ක් එකතු කරයි.

ප්‍රාථමික පාසල් ළමයින්ට රැගෙන යාම සමඟ එකතු කිරීමට උගන්වන ආකාරයටම, තනි ලේඛනයක තබා ගත හැකි ප්‍රමාණයට වඩා විශාල සංඛ්‍යාවක් හැසිරවීමට CPU ට පැවසිය හැකිය. බොහෝ සාමාන්‍ය ගණිත මෙහෙයුම් සඳහා, ඕනෑම ප්‍රායෝගික ප්‍රමාණයේ සංඛ්‍යාවක් සඳහා මෙය සත්‍ය වේ.


10

වෙනස පවතින්නේ අප පරිගණකවල දත්ත ගබඩා කරන ආකාරයෙනි.

න්‍යායාත්මක 8-බිට් යන්ත්‍රයක් සඳහා අපට කළ හැක්කේ එක් ප්‍රොසෙසර ලේඛනයක හෝ මතක ලිපිනයක 2 ^ 8 අගයන් පමණක් ගබඩා කළ හැකි බව ඔබ නිවැරදිය. (කරුණාකර මතක තබා ගන්න මෙය භාවිතා කරන ප්‍රොසෙසරය, මතක ගෘහ නිර්මාණ ශිල්පය ආදිය මත පදනම්ව "යන්ත්‍රය" සිට "යන්ත්‍රය" දක්වා වෙනස් වේ. නමුත් දැනට අපි උපකල්පිත 'ඒකාකෘති' යන්ත්‍රයක් සමඟ රැඳී සිටිමු.)

න්‍යායාත්මක 16-බිට් යන්ත්‍රයක් සඳහා, ලේඛනයේ / මතක ස්ථානයක උපරිම අගය 2 ^ 16 ක් වනු ඇත, 32-බිට් යන්ත්‍රයක් සඳහා, 2 ^ 32, ආදිය.

වසර ගණනාවක් තිස්සේ, ක්‍රමලේඛකයින් විසින් එක් ප්‍රොසෙසර ලේඛනයක හෝ මතක ලිපිනයක ගබඩා කළ හැකි ප්‍රමාණයට වඩා විශාල සංඛ්‍යාවක් ගබඩා කිරීමට හා හැසිරවීමට සියලු ආකාරයේ චිකනරි සකස් කර ඇත. බොහෝ ක්‍රම තිබේ, නමුත් ඒවා සියල්ලම ඔවුන්ගේ "ස්වදේශීය" ලේඛනයේ / මතක ස්ථාන පළලට වඩා විශාල අගයන් ගබඩා කිරීම සඳහා එක් ලේඛනයක් / මතක ලිපිනයක් භාවිතා කිරීම සම්බන්ධ වේ.

මෙම සියලු ක්‍රම ප්‍රයෝජනවත් වන්නේ යන්ත්‍රයට ස්වදේශීය ධාරිතාවට වඩා විශාල අගයන් ගබඩා කිරීමට / සැකසීමට හැකි බැවිනි. අවාසිය නම් සෑම ප්‍රවේශයක්ම පාහේ බහු යන්ත්‍ර උපදෙස් / කියවීම් / යනාදිය අවශ්‍ය වේ. මෙම සංඛ්‍යා හැසිරවීමට. ඉඳහිට විශාල සංඛ්‍යාවක් සඳහා, මෙය ගැටළුවක් නොවේ. සමඟ කටයුතු කරන විට ගොඩක් විශාල සංඛ්යාවක් (විශේෂයෙන් ම විශාල මතක ලිපින) යන පොදු කාර්ය සම්බන්ධ මෝහනය දේවල් බිම.

එබැවින් විශාල සංඛ්‍යාවක් "දේශීයව" හැසිරවීම සඳහා රෙජිස්ටර්, මතක ස්ථාන සහ මතක ලිපින දෘඩාංග "පුළුල්" සහ පුළුල් කිරීමට ඇති පොදු ආශාව වන අතර එම සංඛ්‍යා අවම මෙහෙයුම් ගණන සමඟ හැසිරවිය හැකිය.

සංඛ්‍යා ප්‍රමාණය අසීමිත බැවින්, ප්‍රොසෙසර් ලේඛනය / මතක ප්‍රමාණය / ලිපිනය සැමවිටම ස්වදේශීය සංඛ්‍යා ප්‍රමාණයේ ශේෂයක් වන අතර විශාල හා විශාල පළල ක්‍රියාත්මක කිරීම සඳහා වන පිරිවැය.


8

බිට් 32 පරිගණකවලට තනි යන්ත්‍ර වචනයකින් 2 ^ 32 දක්වා සංඛ්‍යා පමණක් ගබඩා කළ හැකි නමුත් එයින් අදහස් කරන්නේ ඔවුන්ට විශාල දත්ත ප්‍රමාණයක් හැසිරවිය නොහැකි බවයි.

බිට් 32 පරිගණකයක අර්ථය සාමාන්‍යයෙන් දත්ත බස් රථය සහ ලිපින බස් රථය බිටු 32 ක් පළල වන අතර එයින් අදහස් කරන්නේ පරිගණකයට එකවර ගිගාබයිට් 4 ක මතක ලිපින ඉඩ ප්‍රමාණයක් හැසිරවිය හැකි අතර දත්ත බස් රථයට එකවර දත්ත බයිට් හතරක් යැවිය හැකි බවයි. .

කෙසේ වෙතත් පරිගණකය වැඩි දත්ත හැසිරවීම සීමා නොකරයි, එය දත්ත බස් රථය හරහා යවන විට දත්ත බයිට් කුට්ටි හතරකට බෙදිය යුතුය.

සාමාන්‍ය ඉන්ටෙල් 32-බිට් ප්‍රොසෙසරයට අභ්‍යන්තරව බිට් 128 අංක හැසිරවිය හැකි අතර එමඟින් කිසිදු ගැටළුවක් නොමැතිව 10000000000000000000000000000000000 වැනි අංක හැසිරවීමට ඉඩ සලසයි.

ඔබට පරිගණකයකට වඩා විශාල සංඛ්‍යාවක් හැසිරවිය හැකිය, නමුත් පසුව ගණනය කිරීම් මෘදුකාංග මඟින් කළ යුතුය, CPU සතුව බිටු 128 ට වඩා විශාල සංඛ්‍යාවක් හැසිරවීමට උපදෙස් නොමැත. (එයට පාවෙන ලක්ෂ්‍ය සංඛ්‍යා ස්වරූපයෙන් වඩා විශාල සංඛ්‍යාවක් හැසිරවිය හැකි නමුත් ඔබට ඇත්තේ නිරවද්‍යතාවයේ ඉලක්කම් 15 ක් පමණි.)


6

වෙනත් බොහෝ පිළිතුරු සඳහා සටහනක් එක් කිරීම, මෙය මග හැරී ඇති මෙම ප්‍රශ්නයේ ඉතා වැදගත් කරුණකි.

"32 බිට්" යන්නෙන් අදහස් කරන්නේ ලිපින පළලයි. එයට ලේඛනයේ ප්‍රමාණය සමඟ කිසිදු සම්බන්ධයක් නැත. බොහෝ බිට් 32 CPU වල 64 හෝ 128 බිට් රෙජිස්ටර් ඇත. විශේෂයෙන් x86 නිෂ්පාදන රේඛාව ගැන සඳහන් කරන විට, මෑත කාලීන පාරිභෝගික CPU සියල්ලම 64bit වන අතර විශේෂ අරමුණු සඳහා බිට් රෙජිස්ටර් 256 ක් දක්වා ඇත.

රෙජිස්ටර් පළල සහ ලිපින පළල අතර මෙම වෙනස පුරාණ කාලයේ සිටම පැවතුනි, අපට බිට් රෙජිස්ටර් 4 ක් සහ බිට් ලිපින 8 ක් තිබුනි, නැතහොත් අනෙක් අතට.

වෙනත් පිළිතුරු වල පැහැදිලි කර ඇති පරිදි, විශාල ප්‍රමාණයක් ගබඩා කිරීම ලේඛනයේ ප්‍රමාණය නොසලකා ගැටළුවක් නොවන බව දැකීම සරල ය.

ඔවුන් කළ සිදු විය හැකි ඕනෑම දෙයක් ප්රමාණයේ ලේඛන, මීට අමතරව ද හැකි හේතුව ගණනය විශාල සංඛ්යා බව ඉතා විශාල ගණනය කිරීම් ද නාම ලේඛන බවට සුදුසු කරන කුඩා ඒවා ගණනාවකට බෙදිය හැකිය ඇත (එය හුදෙක් කුඩා ටිකක් වඩාත් සංකීර්ණයි යථාර්ථයේ දී).


එය ඇත්ත වශයෙන්ම සත්‍ය නොවේ; 64 බිට් යන්නෙන් අදහස් කරන්නේ නොගැලපෙන නමුත් රෙජිස්ටර් පළල 64 බිට් සහිත පද්ධති නිතරම 64 බිට් ලෙස හැඳින්වේ. විකිපීඩියාව පවසන්නේ “බිට් 64 පරිගණක ගෘහ නිර්මාණ ශිල්පයට සාමාන්‍යයෙන් බිටු 64 ක් පළල පූර්ණ සංඛ්‍යා හා ලිපින ලේඛණ ඇත”. ඔව්, නවීන x86 (හෝ AMD-64) නිෂ්පාදන පෙළට විශාල විශේෂ කාර්ය ලේඛනයක් ඇත, නමුත් ඒවාට බිට් 64 ප්‍රධාන ලේඛණ ඇති අතර බිටු 48-52 මතක මතකයට ප්‍රවේශ විය හැකිය; පැරණි x86 පද්ධති වලට බිට් ප්‍රධාන රෙජිස්ටර් 32 ක් ඇති අතර මතක බිටු 24-36 ක් ලබා ගත හැකි අතර 8086 බිට් 16 චිපයක් ලෙසද, බිට් 16 පළල රෙජිස්ටර් වලින්ද, මතක බිටු 20 කටද ප්‍රවේශ විය.
prosfilaes

roprosfilaes එය බොහෝ වටිනා තොරතුරු, මම ඒවා ගැන සඳහන් කරමින් සිටියෙමි (විස්තර මතක තබා ගැනීමට මා අසමත් විය. මෙය පිළිතුරට සංස්කරණය කිරීමට නිදහස් වන්න.
මාෆු

6

දැනටමත් ලබා දී ඇති පිළිතුරු ඇත්තෙන්ම හොඳ ය, නමුත් ඔවුන් විවිධ පැතිවලින් ගැටලුව විසඳීමට නැඹුරු වන අතර එමඟින් අසම්පූර්ණ පින්තූරයක් ඉදිරිපත් කරයි. ඒවා ද තරමක් අධික තාක්‍ෂණික බව මගේ මතයයි.

එබැවින්, ඉඟි කර ඇති නමුත් වෙනත් කිසිදු පිළිතුරක පැහැදිලිව ප්‍රකාශ නොවූ යමක් පැහැදිලි කර ගැනීම සඳහා, සහ කාරණයේ හරය ලෙස මා සිතන දේ:

ඔබ ඔබේ ප්‍රශ්නයේ සංකල්ප කිහිපයක් මිශ්‍ර කරමින් සිටින අතර , ඉන් එකක් ("බිට් 32") සැබවින්ම විවිධාකාර දේ වෙත යොමු විය හැකිය (සහ විවිධ පිළිතුරු විවිධ අර්ථකථන උපකල්පනය කර ඇත). මෙම සංකල්ප සියල්ලටම විවිධ පරිගණක සන්දර්භයන්හි භාවිතා කරන ලද (හෝ ලබා ගත හැකි) බිටු ගණන සමඟ යම් සම්බන්ධයක් ඇත (මා මෙයින් අදහස් කරන්නේ පහත උදාහරණ මගින් පැහැදිලි වනු ඇත), නමුත් සංකල්ප වෙනත් ආකාරයකින් සම්බන්ධ නොවේ .

පැහැදිලිවම:

  • "IPv4 / 6" යන්නෙන් අදහස් කරන්නේ අන්තර්ජාල ප්‍රොටොකෝලයයි , තොරතුරු ඇසුරුම් කර අන්තර්ජාලය තුළ අර්ථ නිරූපණය කරන්නේ කෙසේද යන්න නිර්වචනය කරන නීති මාලාවක්. IPv4 සහ IPv6 අතර ඇති මූලික (හෝ අවම වශයෙන් වඩාත්ම ප්‍රසිද්ධ) වෙනස වන්නේ ලිපින අවකාශය (එනම් ජාලයේ විවිධ ස්ථාන අතර වෙනස හඳුනා ගැනීමට භාවිතා කළ හැකි ලිපින සමූහය) IPv6 හි විශාල වීමයි. මෙම දත්ත එක් එක් පැකට් බිට් ජාලය හරහා යැවීමට කොපමණ ඇති කළ යුතු වේ සඳහා වෙන් , මේ පැකට් ගේ යවන්නාගේ හඳුනා (කිරීමේ අරමුණ සඳහා එනම් කට්ටලයක් පසෙකට) හා ලබන්නා අදහස්.
    • පරිගණක නොවන ප්‍රතිසමයක්: සෑම පැකට්ටුවක්ම ගොළුබෙල්ලා හරහා යවන ලද ලිපියක් හා සමාන වන අතර ලිපින අවකාශය ලියුම් කවරයේ ලිපිනය සහ ආපසු ලිපිනය ලිවීමේදී ඔබට භාවිතා කිරීමට අවසර දී ඇති අක්ෂර ප්‍රමාණයට සමාන වේ.
    • මේ දක්වා වෙනත් කිසිදු පිළිතුරක මෙය සඳහන් වී ඇති බවක් මා දකින්නේ නැත.
  • පරිගණක-මතක "වචන" (32-බිට් සහ 64-බිට්) සාමාන්‍යයෙන් පරිගණකයක් භාවිතා කරන කුඩාම දත්ත කැබැල්ල ලෙස සිතිය හැකිය, නැතහොත් "සිතයි". මෙම දත්ත බිටු එකට එකතු වී වෙනත් දත්ත බිටු සෑදේ , පෙළ කැබලි හෝ විශාල සංඛ්‍යා වැනි.
  • 32-බිට් පොයින්ටර්ස් වචන විය හැකිය හෝ නොවිය හැක, නමුත් ඒවා පරමාණුකව සලකනු ලැබේ (එනම් කුඩා කොටස් වලට බෙදිය නොහැකි තනි ඒකක ලෙස). කිසියම් අත්තනෝමතික දත්ත කැබැල්ලක මතකයේ පිහිටීම පරිගණකයකට සටහන් කළ හැකි අවම මට්ටමේ ක්‍රමය වන්නේ දර්ශකයන් ය. පරිගණකය භාවිතා කරන දර්ශක ප්‍රමාණය (හෝ, ඇත්ත වශයෙන්ම, මෙහෙයුම් පද්ධතිය විසින්) තනි දර්ශකයකට ප්‍රවේශ විය හැකි මතක පරාසය සීමා කරන බව සලකන්න, මන්ද යත්, දර්ශකයකට “යොමු” කළ හැකි තරම් මතක ස්ථාන පමණක් ඇති බැවිනි. දර්ශකය සඳහාම හැකි අගයන් ඇති බැවින්. IPv4 හැකි අන්තර්ජාල ලිපින පරාසය සීමා කරන ආකාරයට මෙය සමාන වේ, නමුත් එසේ නොවේඋදාහරණයක් ලෙස, විශේෂිත වෙබ් පිටුවක තිබිය හැකි දත්ත ප්‍රමාණය සීමා කරන්න. කෙසේ වෙතත්, දර්ශකයේ විශාලත්වය මඟින් දර්ශකයේ පෙන්වා දිය හැකි දත්තවල ප්‍රමාණය සීමා නොවේ . (ලිනක්ස් හි පරීක්ෂා දත්ත ප්රමාණය පෙන්නුම් කරන්නක් පරාසය ඉක්මවා ඉඩ සඳහා යෝජනා ක්රමය සඳහා උදාහරණයක් ලෙස, inode පහිටුම් දක්වනය ව්යුහය පහිටුම් දක්වනය සාමාන්යයෙන් අවධානය යොමුකළ අදහස් සිට මෙම, "දර්ශකයේ" යන වචනය තරමක් වෙනස් භාවිතය සාමාන්ය වේ වඩා සටහන. ඒ අහඹු ප්‍රවේශ මතකය, දෘ hard තැටියේ ඉඩ නොවේ.)
    • පරිගනක නොවන ප්‍රතිසමයක්: හ්ම්ම්ම්ම් .... මෙය ටිකක් උපක්‍රමශීලීයි. පුස්තකාල ද්‍රව්‍ය සුචිගත කිරීම සඳහා ඩිවි දශම ක්‍රමය ටිකක් සමාන විය හැකිද? හෝ ඕනෑම සුචිගත කිරීමේ පද්ධතියක්, ඇත්ත වශයෙන්ම.
    • සයිට්නූක්ගේ පිළිතුර බලන්න .
    • ඉහත කරුණු පිළිබඳ මගේ පැහැදිලි කිරීම සියුම් තොරතුරු කිහිපයක් ඉවත් කර ඇති අතර එය සම්පූර්ණයෙන්ම නිවැරදි නොවන බව කරුණාවෙන් සලකන්න. කෙසේ වෙතත්, ක්‍රමලේඛකයින් විසින් දර්ශකයන් සමඟ කෙලින්ම වැඩ කරන ක්‍රමලේඛන භාෂාවල, මා ඇදගත් මානසික ආකාරය සාමාන්‍යයෙන් ප්‍රායෝගික අරමුණු සඳහා ප්‍රමාණවත් වේ.
  • මෙම පරිගණක "ප්රදර්ශනය කිරීමට හැකි" බව සංඛ්යා පරිගණකයේ දෘඩාංග හෝ මෙහෙයුම් පද්ධතිය විසින් සීමා (ප්රායෝගික කටයුතු සඳහා) නොවේ; ඒවා වෙනත් ඕනෑම පා like යක් ලෙස සලකනු ලැබේ.

මෙය "32 බිට්" යන වාක්‍ය ඛණ්ඩයේ පුළුල් අර්ථකථන ලැයිස්තුවක් වීමට අදහස් නොකරන බව සලකන්න.

අමතර ණය: පරිගණක මතකයේ සංඛ්‍යා හා ප්‍රාථමික කොටස් අතර හිස් අස්ථි දාර්ශනික වෙනස සැබවින්ම දැකීමට, ටියුරින් යන්ත්‍ර ගැන ටිකක් කියවන්න .


IPv4 සඳහා යොමු කිරීම IPv4 ලිපින ගණන අත්සන් කරන ලද 32-බිටු නිඛිලයක දිගට effectively ලදායී ලෙස සීමා වී ඇති බව පෙන්වා දීමට මම සිතමි. IPv6 බිටු 128 ක් භාවිතා කරයි.
ක්ලෝන්කෙක්ස්

LonClonkex සමහරවිට එය නියත වශයෙන්ම ප්‍රශ්නය නොවේ.
කයිල් ස්ට්‍රෑන්ඩ්

5

ඔබ කැල්කියුලේටරයේ උදාහරණයක් ලෙස 1000000000000 ලියන්නේ නම්, පරිගණකය එය දශම ලක්ෂ්‍යය සහිත තාත්වික වර්ග අංකයක් ලෙස ගණනය කරයි . ඔබ සඳහන් කළ බිටු 32 සඳහා සීමාව දශම ලක්ෂ්‍යයකින් තොරව සියලු පූර්ණ සංඛ්‍යා සංඛ්‍යා වලට වඩා ස්පර්ශ වේ. විවිධ දත්ත වර්ග බිටු / බයිට් වලට ඇතුල් වන්නේ කෙසේද යන්න විවිධ ක්‍රම භාවිතා කරයි.

පූර්ණ සංඛ්‍යා අංක : මෙම වගුව ඔබට ලක්ෂ්‍යය අල්ලා ගැනීමට උපකාරී වේ ( http://msdn.microsoft.com/en-us/library/296az74e.aspx ). මෙය C ++ සඳහා සීමාවන් ස්පර්ශ කරයි. උදාහරණයක් ලෙස Int64 වර්ගයේ අංකයට -9223372036854775808 සිට 9223372036854775807 දක්වා සීමාවන් ඇත.

තාත්වික වර්ග අංක : තාත්වික වර්ග අංකවල පාවෙන ලක්ෂ්‍යය සහ on ාතීය අගය අඩංගු වන අතර ඔබට වඩා විශාල සංඛ්‍යා ඇතුළත් කළ හැකි නමුත් සීමිත නිරවද්‍යතාවයකින් / නිරවද්‍යතාවයකින්. ( Http://msdn.microsoft.com/en-us/library/6bs3y5ya.aspx ) උදාහරණයක් LDBL (විශාල ද්විත්ව) C ++ උපරිම නිපුනයා 308 ඇත ලෙස, එසේ හැකි ඔබ ප්රතිඵලයක් සංඛ්යාව ලෙස ඇතුළු හෝ පුළුවන් 9.999 x 10^308, ඔබ විසින් අදහස් න්‍යායාත්මකව ඉලක්කම් 308 (+1) ඇති 9නමුත් එය නිරූපණය කිරීම සඳහා වඩාත් වැදගත් ඉලක්කම් 15 ක් පමණක් භාවිතා කරනු ඇත, ඉතිරිය නැති වී යනු ඇත, සීමිත නිරවද්‍යතාවයට හේතුව.

මීට අමතරව, විවිධ ක්‍රමලේඛන භාෂා ඇති අතර ඒවාට සංඛ්‍යා සීමාවන් වෙනස් ලෙස ක්‍රියාත්මක කළ හැකිය. එබැවින් විශේෂිත යෙදුම්වලට C ++ ට වඩා විශාල (සහ / හෝ වඩා නිවැරදි / නිරවද්‍ය) සංඛ්‍යා හැසිරවිය හැකි යැයි ඔබට සිතිය හැකිය.


මෙම "පිළිතුර" වැරදිය: කැපුම් දෝෂ වළක්වා ගැනීම සඳහා කැල්කියුලේටරයන් BCD අංක නිරූපණය භාවිතා කරයි. IE 0.1 දශම සීමිත දිග ද්විමය සංඛ්‍යාවක් ලෙස නිවැරදිව නිරූපණය කළ නොහැක.
sawdust

5

සාමාන්‍ය ලිනක්ස් පද්ධතියක වැඩසටහන් කීයක් විශාල සංඛ්‍යා සැකසුම් හා ප්‍රතිදානයන් හසුරුවන්නේද යන්න පිළිබඳ ප්‍රායෝගික උදාහරණයකට ඔබ කැමති නම්:

libgmp- ලිනක්ස් පද්ධති සඳහා මේ සඳහා බහුලව භාවිතා වන පුස්තකාලය වන්නේ ග්නූ බහු නිරවද්‍ය ගණිත පුස්තකාලයයි . 2 ^ 80 ගුණ කිරීමෙන් 1000 ට සරල උදාහරණයක්:

#include <gmp.h>

// Each large integer uses the mpz_t type provided by libgmp
mpz_t a_large_number;
mpz_t base;
mpz_t result;

// Initalize each variable
mpz_init(a_large_number);
mpz_init(base);
mpz_init(result);

// Assign the number 2 to the variable |base|
mpz_set_ui(base, 2);

// Raise base^80 (2^80), store the result in |a_large_number|
mpz_pow_ui(a_large_number, base, 80);

// Multiply |a_large_number| by 1000, store the result in |result|
mpz_mul_ui(result, a_large_number, 1000);

// Finally, output the result in decimal and hex notation
gmp_printf("decimal: %Zd, hex: %ZX\n", result, result);

එබැවින් මූලික වශයෙන් එය සාමාන්‍ය + - * / ක්‍රියාකරුවන් භාවිතා කිරීම හා සමාන වේ, පුස්තකාලයක් සමඟ සංඛ්‍යා බිඳ දමා ඒවා අභ්‍යන්තරව බහු යන්ත්‍ර වචන ප්‍රමාණයේ (එනම් 32-බිට්) සංඛ්‍යා ලෙස ගබඩා කරයි. පෙළ ආදානය පූර්ණ සංඛ්‍යා වලට පරිවර්තනය කිරීම සඳහා ස්කෑන්ෆ් () වර්ගයේ කාර්යයන් ද ඇත.

ව්‍යුහය mpz_tහරියටම ස්කොට් චේම්බර්ලින්ගේ අත් දෙක භාවිතා කරමින් 6 ට ගණන් කිරීම හා සමාන වේ. එය මූලික වශයෙන් යන්ත්‍ර වචන ප්‍රමාණයේ පෙළක් වන mp_limb_tඅතර සංඛ්‍යාවක් යන්ත්‍ර වචනයකට ගැළපෙන තරම් විශාල වූ විට, ජීඑම්පී mp_limb_tඅංකයේ ඉහළ / පහත් කොටස් ගබඩා කිරීම සඳහා බහු භාවිතා කරයි .


5

ඔබේ මනසෙහි ඔබ දන්නේ විවිධ ඉලක්කම් 10 ක් පමණි. 0 සිට 9. අභ්‍යන්තරව ඔබේ මොළයේ, මෙය නිසැකවම පරිගණකයකට වඩා වෙනස් ආකාරයකින් කේතනය කර ඇත.

අංකයක් කේතනය කිරීම සඳහා පරිගණකයක් බිටු භාවිතා කරයි, නමුත් එය වැදගත් නොවේ. ඉංජිනේරුවන් දේවල් කේතනය කිරීමට තෝරාගත් ක්‍රමය එයයි, නමුත් ඔබ එය නොසලකා හැරිය යුතුය. බිට් 32 පරිගණකයකට විවිධ අගයන් බිලියන 4 කට වඩා අද්විතීය නිරූපණයක් ඇති අතර, මිනිසුන් වන අපට විවිධ අගයන් 10 ක් සඳහා අද්විතීය නිරූපණයක් ඇත.

අපි විශාල සංඛ්‍යාවක් වටහා ගත යුතු සෑම අවස්ථාවකම අපි පද්ධතියක් භාවිතා කරමු. වම් කෙළවරේ අංකය වඩාත් වැදගත් ය. එය ඊළඟට වඩා 10 ගුණයක් වැදගත් ය.

විවිධ අගයන් බිලියන හතරක් අතර වෙනස හඳුනාගත හැකි පරිගණකයකට, ඒ හා සමානව වම් කෙළවරේ අගය, සමූහයක් තුළ, එම කට්ටලයේ ඊළඟ අගය මෙන් බිලියන හතර ගුණයකින් වැදගත් වේ. ඇත්ත වශයෙන්ම පරිගණකයක් කිසිසේත්ම ගණන් ගන්නේ නැත. එය අංකවලට "වැදගත්කම" පවරන්නේ නැත. එය රැකබලා ගැනීම සඳහා ක්‍රමලේඛකයින් විශේෂ කේතයක් සෑදිය යුතුය.

අද්විතීය සංකේත ගණනට වඩා අගයක් වැඩි වන විට, 9 මිනිසුන්ගේ මනසෙහි, ඔබ වමට අංකයට එකක් එකතු කරයි.

3+3=6

මෙම අවස්ථාවේ දී, අංකය තවමත් තනි "තව්" තුළ ගැලපේ

5+5=10. This situation is called an overflow.

එබැවින් මිනිසුන් සැමවිටම අද්විතීය සංකේත නොමැති වීමේ ගැටලුව සමඟ කටයුතු කරයි. පරිගණකයට මෙය සමඟ ගනුදෙනු කිරීමට පද්ධතියක් නොමැති නම්, එය හුදෙක් 0 ලියනු ඇත, අමතර සංඛ්‍යාවක් ඇති බව අමතක කර දමන්න. වාසනාවකට මෙන්, පරිගණකවල "පිටාර ගැලීමේ ධජයක්" ඇත.

987+321 is more difficult.

ඔබ පාසලේදී ක්‍රමවේදයක් ඉගෙන ගෙන ඇති. ඇල්ගොරිතම. ඇල්ගොරිතම තරමක් සරලයි. වම් කෙළවරේ සංකේත දෙක එකතු කිරීමෙන් ආරම්භ කරන්න.

7+1=8, we now have ...8 as the result so far

ඉන්පසු ඔබ ඊළඟ තව් වෙත ගොස් එකම එකතු කිරීම සිදු කරන්න.

8+2=10, the overflow flag is raised. We now have ...08, plus overflow.

අපට පිටාර ගැලීමක් ඇති බැවින් එයින් අදහස් වන්නේ අප ඊළඟ අංකයට 1 ක් එකතු කළ යුතු බවයි.

9+3=12, and then we add one due to overflow. ...308, and we had another overflow.

එකතු කිරීමට තවත් සංඛ්‍යා නොමැත, එබැවින් අපි හුදෙක් තව්වක් සාදා 1 ඇතුල් කරන්න.

1308

මිනිසුන් මෙන් 10 ක් පමණක් වෙනුවට පරිගණකයක් 2 ^ 32 හෝ ඊටත් වඩා හොඳ 2 ^ 64 විවිධ සංකේත ඇත.

දෘඩාංග මට්ටමින්, පරිගණකය එකම ක්‍රමය භාවිතා කරමින් තනි බිටු මත ක්‍රියා කරයි. වාසනාවකට මෙන්, එය ක්‍රමලේඛකයින් සඳහා වියුක්ත වේ. බිට්ස් යනු ඉලක්කම් දෙකක් පමණි, මන්ද එය විදුලි රැහැනක නිරූපණය කිරීම පහසුය. එක්කෝ ආලෝකය ක්‍රියාත්මකයි, නැතහොත් එය අක්‍රියයි.

අවසාන වශයෙන්, පරිගණකයකට ඕනෑම අංකයක් සරල අනුක්‍රමයක් ලෙස පෙන්විය හැකිය. පරිගණකය වඩාත් සුදුසු වන්නේ එයයි. අක්ෂර අනුක්‍රමයක් අතර පරිවර්තනය කිරීම සඳහා වන ඇල්ගොරිතම සහ අභ්‍යන්තර නිරූපණය තරමක් සංකීර්ණ ය.


දී මගේ සිත මම දන්නේ 36, නමුත් මම සාමාන්යයෙන් පමණක් ඉන් 16 භාවිතා කරන්න.
කයිල් ස්ට්‍රෑන්ඩ්

'පරිගණකයක් සංඛ්‍යා කේතනය කිරීම සඳහා බිටු භාවිතා කරයි, නමුත් එය වැදගත් නොවේ.' පරිශීලකයා බිට් වචන 32 ක් ගැන විමසන සන්දර්භය තුළ සහ 2 ^ 32-1 ට වඩා විශාල සංඛ්‍යා ගබඩා කිරීමට ඒවා භාවිතා කරන්නේ කෙසේද යන්න ඉතා වැදගත් වේ.
රිචීඑච්

ඔබේ මොළයේ මතකයේ සංඛ්‍යා සංකේතවත් කරන්නේ කෙසේද යන්න වැදගත් නොවේ. ඔබට සීමිත නිරූපණ සංඛ්‍යාවක් ඇත; බොහෝ දෙනා විවිධ සංකේත 10 ක් ඉගෙන ගෙන ඇත. ඔබේ මොළයේ ඇතුළත මෙය නියුරෝන සහ උපාගම දහස් ගණනක ස්වරූපයෙන් නිරූපණය වේ. පරිගණකයක එය විදුලිය හෝ විදුලි රැහැනක විදුලිය නොමැති ආකාරයෙන් නිරූපණය කෙරේ. ක්‍රමලේඛන දෘෂ්ටි කෝණයකින් - හෝ ගණිතය ඉගෙන ගැනීමේදී, ඔබ නිශ්චිත CPU කට්ටලයක් සඳහා කෙලින්ම ක්‍රමලේඛනය කරන දුර්ලභ අවස්ථාව හැර, එය කිසිසේත්ම වැදගත් නොවේ. ඔහු ඉල්ලන්නේ බිට් 32 එදිරිව 64 බිට් ගැන මිස තනි බිටු ගැන නොවේ.
frodeborli

3

ඔබ අංකයක් ප්‍රදර්ශනය නොකරන නිසා (පරිගණකය සැලකිලිමත් වන පරිදි), නමුත් නූලක් හෝ ඉලක්කම් අනුක්‍රමයක්. ඇත්ත වශයෙන්ම, සමහර යෙදුම් (කැල්කියුලේටරය වැනි), සංඛ්‍යා සමඟ කටයුතු කරන එවැනි සංඛ්‍යාවක් හැසිරවිය හැකි බව මම සිතමි. ඔවුන් භාවිතා කරන උපක්‍රම මොනවාදැයි මම නොදනිමි ... මට විශ්වාසයි තවත් සමහරක් වඩාත් සවිස්තරාත්මක පිළිතුරු එය ආවරණය කරයි.


0

මෙම පිළිතුරේ බොහෝ අන්තර්ගතයන් මුලින් පැමිණියේ මෙම පිළිතුරෙනි (ඊට පෙර ලියා ඇත්තේ අනෙක් ප්‍රශ්නය අනුපිටපතක් ලෙස සලකුණු කිරීමට පෙර). ඒ නිසා මම සාකච්ඡා කරන්නේ බිට් 8 අගයන් භාවිතා කිරීම ගැනයි (මෙම ප්‍රශ්නය බිට් 32 අගයන් ගැන විමසුවද), නමුත් එය හරි නිසා බිට් 8 අගයන් සංකල්පමය වශයෙන් තේරුම් ගැනීමට පහසු වන අතර එම සංකල්ප 32-බිට් අංක ගණිතය වැනි විශාල අගයන්ට අදාළ වේ.

ඔබ බිටු 8 ක් වන සංඛ්‍යා දෙකක් එකතු කළ විට, ඔබට ලබා ගත හැකි විශාලතම අංකය (0xFF + 0xFF = 1FE). ඇත්ත වශයෙන්ම, ඔබ බිටු 8 කින් යුත් සංඛ්‍යා දෙකක් ගුණ කළහොත්, ඔබට ලබා ගත හැකි විශාලතම අංකය (0xFF * 0xFF = 0xFE01) තවමත් බිටු 16 ක් වන අතර එය බිටු 8 ට වඩා දෙගුණයකි.

දැන්, ඔබ උපකල්පනය කරන්නේ x-bit ප්‍රොසෙසරයකට x-bits පිළිබඳ තොරතුරු පමණක් තබා ගත හැකි බවයි. (උදාහරණයක් ලෙස, බිට් 8 ප්‍රොසෙසරයකට බිට් 8 ක් පමණක් නිරීක්ෂණය කළ හැකිය.) එය නිවැරදි නොවේ. 8-බිට් ප්‍රොසෙසරයට බිටු 8 කුට්ටි වල දත්ත ලැබේ. (මෙම "කුට්ටි" වල සාමාන්‍යයෙන් විධිමත් යෙදුමක් ඇත: "වචනයක්". බිට් 8 ප්‍රොසෙසරයක බිට් 8 වචන භාවිතා වේ. බිට් 64 ප්‍රොසෙසරයක බිට් වචන 64 ක් භාවිතා කළ හැකිය.)

එබැවින්, ඔබ පරිගණකයට බයිට් 3 ක් ලබා දෙන විට:
බයිට් # 1: MUL උපදෙස්
බයිට් # 2: ඉහළ ඇණවුම් බයිට් (උදා: 0xA5)
බයිට් # 3: පහළ ඇණවුම් බයිට් (උදා: 0xCB)
පරිගණකයට ප්‍රති result ලයක් ජනනය කළ හැකිය බිටු 8 ට වඩා වැඩිය. CPU විසින් මෙවැනි ප්‍රති results ල ජනනය කළ හැකිය:
0100 0000 0100 0010 xxxx xxxx xxxx xxxx 1101 0111
aka:
0x4082xxxxD7
දැන්, මම ඔබට එය අර්ථ නිරූපණය කරමු:
0x යනු පහත දැක්වෙන ඉලක්කම් ෂඩාස්රාකාර වේ.
මම "40" ගැන වඩාත් විස්තරාත්මකව මොහොතකට සාකච්ඡා කරමි.
82 යනු "A" ලේඛනයේ කොටසකි, එය බිටු 8 ක මාලාවකි.
xx සහ xx යනු තවත් ලේඛණ දෙකක කොටසකි, ඒවා නම් කර ඇත්තේ "බී" ලේඛනය සහ "සී" ලේඛනයයි. මම එම බිටු ශුන්‍ය හෝ වෙනත් අයගෙන් පුරවා නොතිබීමට හේතුව නම්, “ADD” උපදෙස් (CPU වෙත යවනු ලැබේ) එම බිටු උපදෙස් මගින් නොවෙනස්ව පැවතීමට ඉඩ ඇත (නමුත් මෙම උදාහරණයේ මා භාවිතා කරන අනෙකුත් බිටු බොහෝමයක් විය හැකිය සමහර ධජ බිටු හැර, වෙනස් වන්න).
D7 "D" ලේඛනය ලෙස හැඳින්වෙන තවත් බිටු වලට ගැලපේ.
ලේඛනයක් යනු මතකයේ කොටසක් පමණි. රෙජිස්ටාර් සීපීයූ තුළට ගොඩනගා ඇති අතර, එම නිසා සීපීයූවට RAM පොල්ලක මතකය සමඟ අන්තර් ක්‍රියා කිරීමකින් තොරව රෙජිස්ටාර් වෙත පිවිසිය හැකිය.

එබැවින් 0xA5 වාරයක් 0xCB හි ගණිතමය ප්‍රති result ලය 0x82D7 වේ.

දැන්, A සහ ​​B රෙජිස්ටර් වෙනුවට A සහ ​​D රෙජිස්ටර වලට හෝ C සහ D රෙජිස්ටර් වලට බිටු බෙදී ගියේ ඇයි? හොඳයි, නැවත වරක්, මෙය මා භාවිතා කරන නියැදි දර්ශනයක් වන අතර, එයින් අදහස් කරන්නේ සැබෑ එකලස් කිරීමේ භාෂාවකට (ඉන්ටෙල් x86 16-බිට්, ඉන්ටෙල් 8080 සහ 8088 භාවිතා කරන පරිදි සහ බොහෝ නව CPU). "සී" ලේඛනය සාමාන්‍යයෙන් මෙහෙයුම් ගණනය කිරීම සඳහා දර්ශකයක් ලෙස භාවිතා කිරීම (ලූප සඳහා සාමාන්‍ය) සහ මතක ස්ථාන නියම කිරීමට උපකාරී වන ඕෆ්සෙට් පිළිබඳ තොරතුරු තබා ගැනීම සඳහා "බී" ලේඛනය වැනි පොදු නීති කිහිපයක් තිබිය හැකිය. එබැවින්, සමහර පොදු ගණිතමය කාර්යයන් සඳහා "A" සහ "D" වඩාත් පොදු විය හැකිය.

එක් එක් CPU උපදෙස් සඳහා එකලස් කිරීමේ වැඩසටහන් කරන පුද්ගලයින් විසින් භාවිතා කරන යම් ලියකියවිලි තිබිය යුතුය. එම ලියකියවිලි මඟින් එක් එක් උපදෙස් මගින් භාවිතා කරන රෙජිස්ටර් මොනවාද යන්න සඳහන් කළ යුතුය. (එබැවින් කුමන රෙජිස්ටාර් භාවිතා කළ යුතුද යන්න තේරීම බොහෝ විට නියම කරනු ලබන්නේ එකලස් කිරීමේ භාෂා ක්‍රමලේඛකයින් නොව CPU හි නිර්මාණකරුවන් විසිනි. කෙසේ වෙතත්, යම් නම්‍යතාවයක් තිබිය හැකිය.)

දැන්, ඉහත උදාහරණයේ ඇති "40" වෙත ආපසු යාම: එය බිටු මාලාවක් වන අතර එය බොහෝ විට "ධජ ලේඛනය" ලෙස හැඳින්වේ. කොඩි ලේඛනයේ සෑම බිට් එකකටම නමක් ඇත. නිදසුනක් ලෙස, ප්‍රති over ලය එක් බයිට් එකක් ගබඩා කළ හැකි අවකාශයට වඩා විශාල නම් CPU සැකසිය හැකි “පිටාර ගැලීම්” බිට් ඇත. (“පිටාර ගැලීම” බිට් බොහෝ විට හැඳින්වෙන්නේ “ඕෆ්” යන කෙටි නමිනි. එය ප්‍රාග්ධනයක් මිස ශුන්‍ය නොවේ.) මෘදුකාංගයට මෙම ධජයේ වටිනාකම පරීක්ෂා කර “ගැටලුව” දැකිය හැකිය. මෙම බිට් සමඟ වැඩ කිරීම බොහෝ විට ඉහළ මට්ටමේ භාෂාවන් විසින් නොපෙනෙන ලෙස හසුරුවනු ලැබේ, එබැවින් ආරම්භක ක්‍රමලේඛකයින් බොහෝ විට CPU ධජ සමඟ අන්තර් ක්‍රියා කරන්නේ කෙසේද යන්න ඉගෙන නොගනී. කෙසේ වෙතත්, එකලස් කිරීමේ ක්‍රමලේඛකයින් සාමාන්‍යයෙන් මෙම ධජ වලට වෙනත් විචල්‍යයන්ට සමාන ආකාරයකින් ප්‍රවේශ විය හැකිය.

උදාහරණයක් ලෙස, ඔබට බහුවිධ ADD උපදෙස් තිබිය හැකිය. එක් ADD උපදෙස් මඟින් ප්‍රති results ල බිටු 16 ක් A ලේඛනයේ සහ D ලේඛනයේ ගබඩා කළ හැකි අතර තවත් උපදෙස් මඟින් අඩු බිටු 8 ක් A ලේඛනයේ ගබඩා කර, D ලේඛනය නොසලකා හැර පිටාර ගැලීමේ බිට් නියම කළ හැකිය. පසුව, (A ලේඛනයේ ප්‍රති results ල ප්‍රධාන RAM තුළට ගබඩා කිරීමෙන් පසුව), ඔබට තවත් ADD උපදෙස් භාවිතා කළ හැකිය, එය ඉහළ බිටු 8 ක් පමණක් ලේඛනයක ගබඩා කරයි (සමහර විට A ලේඛනයක්.) ඔබට පිටාර ගැලීමේ ධජයක් භාවිතා කිරීමට අවශ්‍යද? ඔබ භාවිතා කරන ගුණ කිරීමේ උපදෙස් මත රඳා පවතී.

(අපේක්ෂිත ප්‍රති result ලයට සරිලන තරම් ඔබ අඩු කළ හොත්, සාමාන්‍යයෙන් "ගලා යන" ධජයක් ද ඇත.)

දේවල් කොතරම් සංකීර්ණ වී ඇත්දැයි ඔබට පෙන්වීමට:
ඉන්ටෙල් 4004 බිටු 4 ක CPU එකක් විය
. Intel 8008 යනු බිටු 8 ක CPU ය. එහි A, B, C, සහ D ලෙස බිටු 8 ක රෙජිස්ටර් තිබී ඇත.
ඉන්ටෙල් 8086 යනු බිට් 16 ක CPU ය. එහි AX, BX, CX, සහ DX ලෙස නම් කරන ලද බිට් 16 රෙජිස්ටර් විය.
ඉන්ටෙල් 80386 බිටු 32 ක CPU එකක් විය. එහි EAX, EBX, ECX, සහ EDX ලෙස නම් කරන ලද බිටු 32 ක් ඇත.
ඉන්ටෙල් x64 CPU වල RAX, RBX, RCX, සහ RDX ලෙස නම් කර ඇති බිට් 64 රෙජිස්ටර් ඇත. X64 චිප්ස් වලට බිට් 16 කේතය (සමහර මෙහෙයුම් ආකාර වල) ධාවනය කළ හැකි අතර බිට් 16 උපදෙස් අර්ථ නිරූපණය කළ හැකිය. එසේ කරන විට, AX ලේඛනය සෑදෙන බිටු යනු EAX ලේඛනය සාදන බිටු වලින් අඩක් වන අතර ඒවා RAX ලේඛනය සෑදෙන බිටු වලින් අඩකි. එබැවින් ඔබ AX හි අගය වෙනස් කරන ඕනෑම වේලාවක ඔබ EAX සහ RAX ද වෙනස් කරයි, මන්ද AX භාවිතා කරන බිටු RAX භාවිතා කරන බිටු වල කොටසකි. . .)

මා සඳහන් කළ ඒවාට වඩා කොඩි සහ ලේඛණ තිබේ. සරල සංකල්පීය උදාහරණයක් සැපයීම සඳහා මම බහුලව භාවිතා කරන ඒවා තෝරා ගතිමි.

දැන්, ඔබ බිටු 8 ක CPU එකක සිටී නම්, ඔබ මතකයට ලියන විට, බිටු 8 ක ලිපිනයක් යොමු කිරීමට ඔබට යම් සීමාවන් සොයා ගත හැකිය, බිටු 4 ක හෝ බිටු 16 ක ලිපිනයක් නොවේ. CPU මත පදනම්ව විස්තර වෙනස් වනු ඇත, නමුත් ඔබට එවැනි සීමාවන් තිබේ නම්, CPU බිටු 8 වචන සමඟ කටයුතු කරයි, එබැවින් CPU බොහෝ විට "8-bit CPU" ලෙස හැඳින්වේ.


මගේ පිළිතුරේ කොටස් මෙම ප්‍රශ්නයට තවත් පිළිතුරු කිහිපයක් නැවත කියවන බවක් මට හැඟේ. කෙසේ වෙතත්, වෙනත් ප්‍රශ්නයක් සඳහා මා එය ලියා ඇති බැවින් මම මුලින්ම අන්තර්ගතය ලිවූ විට මෙය නොදැනුණි. සී භාෂාවේ යම් කේතයක් ඇතුළුව ඇනිමයිස්ගේ පිළිතුර මම අගය කරන අතරම , මගේ අන්තර්ගතය එකලස් ක්‍රියාකරන ආකාරය පිළිබඳ විස්තර සපයන අතර එය CPU හි සත්‍ය ක්‍රියා / සැලසුමට සමීප වේ. එබැවින් මගේ පිළිතුර අනෙක් සියල්ලන්ට වඩා “වඩා හොඳ” උත්තරීතර පිළිතුර වීමට උත්සාහ නොකරයි, නමුත් අතිරේකයකි; අමතර අවබෝධයක් සහිත තවත් ඉදිරිදර්ශනයක් එක් කිරීම
TOOGAM
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.