明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1663|回复: 10

[经验] AutoLisp中的整数研究

[复制链接]
发表于 2022-10-8 15:22:53 | 显示全部楼层 |阅读模式
本帖最后由 baitang36 于 2022-10-8 20:41 编辑

先看一段源码:
(defun tt ()
  (setq a 127)
  (setq b 129)
  (setq c 32767)
  (setq d 32769)
  (setq e 1073741823)
  (setq f 1073741825)
  (setq g 2147483647)
  (setq h 2147483649)
  (setq i 4294967295)
  (setq j 4294967297)
)
;(vlisp-compile 'st "d:/00/tt.lsp")
编译后,解码是这样的:
Offset      0  1  2  3  4  5  6  7   8  9 10 11 12 13 14 15
00000000   0D 0A 20 46 41 53 34 2D  46 49 4C 45 20 3B 20 44      FAS4-FILE ; D
00000016   6F 20 6E 6F 74 20 63 68  61 6E 67 65 20 69 74 21   o not change it!
00000032   0D 0A 37 38 0D 0A 31 34  20 24 14 00 00 00 00 32
00000048   7F 06 0D 00 33 81 00 00  00 06 0C 00 33 FF 7F 00   
00000064   00 06 0B 00 33 01 80 00  00 06 0A 00 33 FF FF FF     
00000080   3F 06 09 00 33 01 00 00  40 06 08 00 33 FF FF FF   
00000096   7F 06 07 00 09 06 00 06  05 00 09 04 00 06 03 00                  
00000112   09 02 00 0B 06 01 00 16  24 0D 0A 31 35 35 20 34           $  155 4
00000128   20 24 14 01 01 01 00 32  00 32 18 2A 39 01 00 5B    $     2 2 *9  [
00000144   54 54 00 00 01 01 43 00  00 03 00 0A 32 00 32 4E   TT    C     2 2N
00000160   2A 39 01 00 5B 4A 00 00  3B 34 32 39 34 39 36 37   *9  [J  ;4294967
00000176   32 39 37 2E 30 00 5B 49  00 00 3B 34 32 39 34 39   297.0 [I  ;42949
00000192   36 37 32 39 35 2E 30 00  5B 48 00 00 3B 32 31 34   67295.0 [H  ;214
00000208   37 34 38 33 36 34 39 2E  30 00 5B 47 00 46 00 45   7483649.0 [G F E
00000224   00 44 00 43 00 42 00 41  00 00 5C 00 00 43 00 00    D C B A  \  C  
00000240   0E 00 0A 5C 00 00 32 00  5B 54 54 00 00 3A 01 43      \  2 [TT  : C
00000256   03 00 01 00 1C 14 01 00  00 00 09 02 00 0A 57 00                 W
00000272   00 00 00 09 03 00 06 01  00 09 01 00 16 16 00 E1                  ?
00000288   5E 7A 37 A8 22 0A 3B 66  61 73 34 20 63 72 75 6E   ^z7? ;fas4 crun
00000304   63 68 0A 3B 24 3B 41 31  30 2F 38 2F 32 32         ch ;$;A10/8/22

可以看出;
1)小于128的整数用 32 xx 表示,数字占用一个字节
2)大于127的整数用33 xx xx xx xx 表示,数字占用4个字节
3)2147483647是最大的整数,是33 FF FF FF 7F,比它大的整数都变成了带小数点的实数。
4)4294967297是3B 32 31 34 37 34 38 33 36 34 39 2E 30,直接是用ascii编码的字符串
现在有个问题,如果需要大于的2147483647的整数,该怎么办呢?

在64位acad下再做一个试验:
命令: (load "c:/00/trf_9.fas")
命令: (tranf "_addr-of")
T
命令: (_addr-of princ)
2095471388416
命令: (setq a(_addr-of princ))
2095471388416
命令: (type a)
INT
命令: !a
2095471388416
_addr-of是一个保留函数,它的作用是读取一个符号的内存地址,内存地址是个大整数。
但这个大整数有点问题,不能进行任何运算,+1就变成小整数了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 2明经币 +2 收起 理由
ssyfeng + 1 赞一个!
自贡黄明儒 + 1 很给力!

查看全部评分

"觉得好,就打赏"
    共1人打赏
发表于 2022-10-8 16:09:04 | 显示全部楼层
不可能有更大整数,再大就必须变成浮点的
发表于 2022-10-8 16:11:00 | 显示全部楼层
本帖最后由 vitalgg 于 2022-10-8 16:58 编辑


CAD中就算是浮点数,其十进制有效数字,也只有16位。再大的数也没有意义。



斐波那契 数列的第 6666 位的值。


浮点数也是有范围的。


命令: (@:fib 66666)
"104843111885549435442642613777884512505771748394633542828156168423390591801996044022397878706144455332738751710503647508357667532968107045321353112405161914361665777048078325465646008065218870630583991941842126871702430273277730651276138623026125571202040347561827110316661863049320476327239088841686212556711867740069792724802471439582737224786931468868416007474702117970024940818015632791476727072904771710566391005530080051580960415479782084414589185887110402087380653976137886812817363661753884116905949616671108176601122067145567225755406014633389244945608954867846409531186761471258308665559526079931491190921775426783306928298420910495546551903650370363035149865607117677457528973264229262901257479747480825012262570499258770572677599561183737612060648734496605197956062310756180654240436024803324437322165518912095396229809995651103074974446586511936784473527583849844092588484345973509204217912939785891526071651735944690382741671523371729583902383649079663971700517667030434646749115743744850524300700183813769653642363542277088264419223644133420405016965756173427764895402687071158066718566308367564427745559294612191746905363040512548605424270603392869727529134854921392109172962331954603911821160408384393188461553184230098899532309432065214029222427706050871315954892217471512166740594264253544913728070111855850897791676058084400910701296680510036020455809495928018774283625358187731923166748188481385997507245271102819207262735489614848096563079922673839008829614930362742863129159410540107604160503036190352973077735170342859202941571420222671577594692160816833387935010944834723461671693692803256517759668863684997884321153062754816245221171183908964034932235108638135994451893796275142319024050511725627563675307058730169854874029158848399419990428613156522109415288840172021386552077008056674566164776540892067442456530990304829479080938158012319606723499582880999368638610318649925156926188397782845103826610716674722614765431391320858010387660516565502137906285114412404072355872342455171602054612363427646698133722743450508882987211078240954358459070174658706869736695443810040054628318064105009289483004055840537703650039049154331726189293214623598370836479358093501251942142923833316014538424597066345111485483620949556781845175704994826373714414622010904102340597231701495059668420976301881398949121823413574093896311572714558398388982209491737688805933051135949885198566904223006993184190767752858148320583986715861601252854229776150176467628869439220104280012301139970170108203627401949070415636125060745824252904188053219202993457805117694790003348314393175392485591582353350490919108590922532747442079314623342763182854875807937745682532845862932243141122849715479454932411570516191416885868726483082996967832579822279667513258919680061612937099547466269243333059287001580383621835434915141902723415644331943181901660040729179764701449765603855692460931836432660541599875036066259125148751553890021524135417117982137796772049181846788713518964423315249728436250943506652230172099885539861472018711189915488278525940675694354142742703588762504917457420994043841783835616278477781208874153446441934797442119343418641901156452722175383490928645681849886193382465787081190333167055441331962422070135832351150908689251670564952578940993608891078021268289402680443975608618602273984129909115387104420429139242272447128158470604691869324357743738491272703597771024024698769134953061755958515267421492885242572836670147963775231095984803796151577854685202182692292065050982087915302300127454665620314492397553843224832758599614834995486497454724462667068596612455078033991739978310125969218631160456872033140043121975632825858913358769085410596654093124596559390962345279358068765240329045597382100282990119835713059309728898928966290031653877507173285537075360175910192610190159943150397084121569026967793697216238932799261295160278509438008644520137157631335918521217293191614564081564495495325879096924898326037271544711666442230995949955396758630583304601291509140178653440491851760426556000021545407997214078076439418212341684774446676405408450381005666000012532497714
5954181991633078329287892833944946664927930125589899983289457253934658418762868518680024847418180118772054110271815190206451479882377724185045261015106064895078771610730569617718683321519910318799262476286498480168823885255496012241108902359394197651762908283768250991036236674778736563382759307261658705305825221681423316344603949738926266436674274539659121609507553469575186896394221335904341443033292465427462443428633175262300198361496260211972951401323130054600418144195060235985534605742467019617647718826728464025286459968817647686267530329350047152863054912149286818953914016799736074602663716476484086686621798854343435175922236494852789804431358172994970545766184121863933351984497966975099856117373550412204598545239891436991447117037808594126690870032482073211332460408035993752909250769311609165983844067340074054453850697954575619992594006387465230104182772756962160894872605401706376351487231177177664467869319719141253669175932279662885350707339440028902339711631232138395164099708022246426980482439545439802791507037925436337240489246445216631036237083838260539837461856182352212445264738391563576570601433804729563680253912971704736986441143529190510537834033515322105375312714697221194053905159529065979106092466701218343858023028502573124856242417779286533775645865184357564179591766406270529902735632679816677182836681438333790268059911669203623193392702670003698478696572287687547260072072424207609639597148360075807416221243901716709941010600509936219766926834493961973165535772846349604400305727168454532958427449411693282664656932628420300749681030424282922577027239282925550493474261813090700898939241303698808259406412773273766885523502694131885592133813742870132328754419752532550644376177135854147162958686561612494729672666109567605060307858809956499239665239957694165173381241603930511183128287638825685734618813783376445497345187845497653017343217997389462501305515855652114501571257693688579545186709985906973936611600486563706951188816789616041065033349907584496656277589013967928566286125976943350692239415966689458239621810081264901270614918167525523508435389341408034832539984772163577689555905612671587986042300230305170447861609513262010241595959025551592362623038684744401442516392336021970222885944244912392403308237955432208455662370348722599355513963036955237894451121169721933663226547454976781851801413646815501970947258843532513215608596343401853007807988060105796499794545567905026880716250769542207458173317331616103317368311874724747440642619815687946417204136374300256992145897848416995263423146142951135930867365150586183248185824912284232845488110369439072590089527869909092203017121952902971217722478183585501801106766817313346991623021457749949499351416926959685591229285274400525664256700818128511839535136191498453040844911104516655141540499361706870782830893147537223546536910738128774756147629355923245209756767276330139008266411883046241670282877903960771906475649389141623695626837329856031497746446080504896188066718178540197499527990046944006638763732176766234425500529045413652525782818371227483834050957735408863802764773934317096297494407232863494401094365444524856536569915359992160642933538511320750074227912868717110037161713881472631041529282379229960811024068551327862449936791725222838971624552533631182213460740801856808799582866919252059523537612625198930142915380466282220382046665485939616964721691141935138867272032826791169022709949881846065072407351181051315968701948582548831884009635939277137660735245886530370828916594870747058478700473092051966966627505830000399595251756516424036600170217929870783204333335278908509307001049123313591226141270638092344440786539348934702732717282427139549504036067771858610473518003719445138587877717511349324212495859574439139613393325608816622694106973442616900980746130361750975910303825991376485801906316893450003736680032087490605278022005173973597941560900299945828597503663799972095730023570085538335031694663470415215568202163630042443855577375963320489428908095249076354579286377990384632148453659066305881285198537943406569789776491528690599444011762747677184998910477679
4070903175736574740801664819910129430543442769767735561074221611262666012104975922229429156210048528861888060440654009767018095852216323592966259759312462034278002168930808335249749301921907806118004992282994960046994770403039849467753077901076691696671229736412665944775510913009983730817268338714872515733344261643203469968698655476447987488161816631013849130002143037238231132252583231347968979196427422557217810894759463352003409845297356620318072395873391903713249978863788326007139044102248599093641431178235795153397652943072174365610980391711069498062534607462359902030266722391934633836144638157766312964037069925969441302189763147972720710040279371273309340890010947283251342526711426575234113377282781777615680009956332864453633353741998906900690488359937669231153985326734836761723122087904422389331506536162026068875653513126384012426021760435328229023748667455263359089627952465959883636777429840985962754107125513611309684303987873385469973056829057902487463748678063492055344936506955223270350604034343567662133934171683781784826201484761767820758976283312522660425745035400579384119756142169782407261218909430336481849540930463069709571810050051996852930295058465782156964226980240354399336410849128688037351945803857873691149867459763882243101410784804733990641990528971104253451355747248018110886136154548684650350832809555951339569498399010711561073914575826375530887704857751368660178241762224408085653109351600918474805029312239083553594105661489739760952277795724145130831861382672948240256275086056779256235056478112993290183577001795838131048393387564988692445132928501578921151622846359883252861116865512826202110293077003428877628542986445307042966137594345814593224113189880035264663848225676266275465149948378051819290041404530736617891326334789354748204627418234728213459879830017258599686339331843091740009885864796289343512634751292893505167173537541409425271455127791401103950214282067363429070734640864101813305824542646493422393242413736156063743156937388820920413503042143817442692491604865145840654891137456183183346183347287898577686614490118249730938146704947787132988925147627717966798691659011358250819147478877481189634457768759731967830076157030329475741254133689075345098529660140856383753695264646177421184071471244550654714025279556354982946826917923682833638159777558438194477889019714219103081715834602062101383412516792516641752392264640527539238072186193665270599804567488684903538623194245244528048590505989239351193141162463478017963653542161299643930036216377046870531795677231334447790064882069115063053241548447926260370543911329111070787552830240954807105295794855374102623159625812155609508416447541478482329974579066563631801181635027712468319565234082326217337193778394097959146193569490376153163439010628892478056916805710774667219411713723201897645740870036870242198864495843892984863900690590355802872395251406230220572749959893829246496712204959270551901294294165133816653285231033643198555551084562400235180724192024810828777073420687348735197096915620561902434572994748310730350975698670499062883244325538055534883190153983993858345620320183804447164039037495919854275057493608107827636358300755417207632087877753089190702703764139776661902144168039748060012534687705905797771126331521895847295845135265473168841480684872808277149730158353376239166855825312101519556515887029753632705931717080335168832669357061438738230784887706949583157927001945065594560210079786168101974503717487313874571985847680527449673281223935078682025954661652745193415726707573208523289052294449604558254486446781103391146847835224365270626552063629162517595202791048155799898869487437163845851478068047568270719761685941902525388009659996935700463722407862191533759151867049029056453375443248908553463267251558211479326229597700533846094989844716106693380415564687065566805411998545633279708937418113272558449407331852481094888585809432105092684691773824868801456186475930681178354241115347788331720865954819651546621502350090365357980371167812497569224924750605692806623356444714678593670823573593740727439834649926360865241645447906380149577634366190
74917119327762549458271494744045130652448041340992286286574955101229312752496066755423666434353014367036170259918769854043752075384728006977080801275206969639414610277415227622100721650756331500111282454807749506425170710058492307399558304836905539053602342445718326522057960767003368757854467868845501487110453617854601245552875416329691054386508207306280158623978829902531477820914211826082647111162807732785151599034823475430121381185123837958213047926445617802192329323230717648887871383893295053579133498231242936470555282269427391228971314434809844161762475778470245983829682181773928735816808642154832120094853310916184934221168068634360849350155965996576386901086752614827036728165395954267213492929372014927770189804276215095845993373148676549536267093527956130205852911229856452525021368323170177715214767421848465217810763871099601551423523315311270344775221893428869545490361559271396907914866794023334970446674672604897919698024614081049745103133526514769202778447023831385380598913678660249508580273912728118770224997925203091724830153789842070283994604897623785727335889191216468220761787213974633725798755920531573769968095450439388818582466388844166923366458935366608640277043277588365354461307396531155670139131108271321438394632197128426910466866889864117364079367444023392795331837453553597463197294747813450406761576862296176231410373439198354227439913519820443451746186895369042597694702697780069465330504347762813995142227288765544327202777143688448596300473645170628648443800561552715185195357908189700151357637014683477017417039744296223712449038152413237973788616049810429935698579059659884825077668106157464296424716088"


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2022-10-8 16:35:00 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2022-10-9 15:40 编辑

对于最大整数,我终于知道了。2的31次方2147483648,是分界线
 楼主| 发表于 2022-10-8 17:00:46 | 显示全部楼层
aeo000000 发表于 2022-10-8 16:09
不可能有更大整数,再大就必须变成浮点的

错,你在64位acad的命令行输入 !princ,看看返回什么?一个64位整数,它的类型是INT,是整数
发表于 2022-10-8 20:19:06 | 显示全部楼层
baitang36 发表于 2022-10-8 17:00
错,你在64位acad的命令行输入 !princ,看看返回什么?一个64位整数,它的类型是INT,是整数

命令: (setq h 2147483649)
2.14748e+09
命令: (type h)
REAL
发表于 2022-10-8 20:23:03 | 显示全部楼层
本帖最后由 aeo000000 于 2022-10-8 20:26 编辑

命令: (setq h 2147483649)
2.14748e+09
命令: (type h)
REAL
命令: (setq y 2147483647)
2147483647
命令: (type y)
INT
已经很不错了,以前的版本,超过直接砍断,为了这,没少出错。现在的版本自动变成real,已经非常牛的了


你看一下我的注册时间。
lisp的历史还是知道一点的
 楼主| 发表于 2022-10-8 20:34:34 | 显示全部楼层
本帖最后由 baitang36 于 2022-10-8 20:35 编辑
aeo000000 发表于 2022-10-8 20:23
命令: (setq h 2147483649)
2.14748e+09
命令: (type h)
你试试这个?
命令: (load "c:/00/trf_9.fas")
命令: (tranf "_addr-of")
T
命令: (_addr-of princ)
2095471388416
命令: (setq a(_addr-of princ))
2095471388416
命令: (type a)
INT
命令: !a
2095471388416

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2022-10-9 08:16:03 | 显示全部楼层
CAD太弱了,表达一个22亿或以上的整数,都做不到。
 楼主| 发表于 2022-10-9 13:45:14 | 显示全部楼层
aeo000000 发表于 2022-10-8 20:23
命令: (setq h 2147483649)
2.14748e+09
命令: (type h)

你是真正的元老,注册这么早啊?失敬了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-15 22:47 , Processed in 0.217714 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表