Jump to content

Kā konkrēti izpaužas C++ valodas tuvums "dzelžiem".


Raimonds1
 Share

Recommended Posts

autors, cerams, ir sapratis, ka bits nav tas pats, kas pikselis un ir radusies kāda nojausma, ka eksistē tādi masīvi. un ka JPG un GIF atšķiras ne tikai ar ekstensiju.

 

Es kustību detektēšanas jautājumos ieteiktu skatīties uz ImageMagick, JO tas ir gana nobriedis atvērtā koda rīks, kas ļauj koncentrēties uz pikseļiem, nevis uz faila hederiem vai formātiem. ImageMagick ir kaut vai elementāra atšķirību detektēšana starp bildēm: http://stackoverflow.com/questions/5132749/diff-an-image-using-imagemagick, pats esmu to izmantojis lai piefiksētu, ir izmaiņas vai nav starp bildēm.

 

 

P.S: topiks sākās pilnmēnesī, vai ne? :)

Link to comment
Share on other sites

Raimonds1

 

 

Nevajag mākslīgi lietas sarežģīt. Galalietotājam nevajag ampērus un visādus parametrus, kuri pēc tam prasa pēcapstrādi. Ir funkcija, kur ievadot diodes parametrus, pievadīto spriegumu aprēķina vajadzīgo pretestību un minimālo jaudu, ko var izdrukāt un doties uz bodi pēc vajadzīgās preces. 

 

Izpratnes vairošanai tomēr vajadzētu to LED pieslēgt caur dažāda lieluma pretestībām un pamērīt, cik liels spriegums krīt uz to LED un pretestību un izdarīt secinajumu, vai tas LED uzvedas kā lineāra pretestība vai ne. Pie cik voltiem vispār sāk spīdēt, kā spīd pie impulsa platuma modulācijas. 

 

Tā paslēgāt kādu lampeli vai lieljaudas pretestību pie dažadu Ah ietilpības alkumulatoriem, lai saprastu, ka pie mazām strāvām nav nekadas starpības, tik cik darbības ilgums un viss.

 

Pie tam tie jautājumi - kas notiek, pie tik voltiem bija tik mA bet palielinot tik par 0,5V pēkšņi uzleca nelineāri - tie jautajumi ir jāuzdod tam , kas macās pašam sev, nevis jānoliek gatavi priekšā.

Link to comment
Share on other sites

Mezavecis

Raimonds1

Kas ko uzskata par dzelžiem. Man dzelži ir verķi, kuru var kontrolēt caur jebkādu interfeisu (RS232, USB, TCP/IP utml.). Ar projektēšanu nenodarbojos, līdz ar to neinteresē sīkākas darbības ar mikroshēmām. Ja var nopirkt gatavu verķi kā PC n dažādās variācijās, kur iebāzt iekšā loģiku, tad priekš kam čakarēties ar primitīviem līdzekļiem. 

 

Tās visas papildus darbības ar LED par minimālām un maksimālām vērtībām ir liekas, jo diodes ražotājs taču visu ir norādījis specifikācijā, kuru vajag izlasīt pirms jebkādām darbībām. Tas nav stāsts no birokrātijas, kur ierēdnis sagudro procedūru, kura prasa resursus apkalpošanai?

Link to comment
Share on other sites

Raimonds1
(labots)

 ImageMagick

 

paskatījos to piemēru, tur viss ir augstā līmenī - gatava programma salīdzina 2 attēlus un izvada rezultātu - atšķirību. 


 

 

Tās visas papildus darbības ar LED par minimālām un maksimālām vērtībām ir liekas, jo diodes ražotājs taču visu ir norādījis specifikācijā, kuru vajag izlasīt pirms jebkādām darbībām. Tas nav stāsts no birokrātijas, kur ierēdnis sagudro procedūru, kura prasa resursus apkalpošanai?

 

Nē, tas ir stāsts par izpratni, kas ļauj projektēt kaut vai tos pašus draiverus. 


 

 

autors, cerams, ir sapratis, ka bits nav tas pats, kas pikselis un ir radusies kāda nojausma, ka eksistē tādi masīvi. un ka JPG un GIF atšķiras ne tikai ar ekstensiju.

 

jā ir sapratis un saprot arī to, ka sākuma uzstādījums - nu parādiet man to C++ rindiņu, kur tas attēlu apstrādes tuvums dzelžiem ir apslēpies bija gana neprofesionāls un radās no nezināšanas.

 

tas gan nenozīmē, ka te nebūtu daudz kā derīga.

Labots - Raimonds1
Link to comment
Share on other sites

paskatījos to piemēru, tur viss ir augstā līmenī - gatava programma salīdzina 2 attēlus un izvada rezultātu - atšķirību. 

 

 

paskaties vēl - tai programmai ir gan funkcijas, gan API dažādām valoldām (funkcionalitātes iekļaušana tavējā softā), kura funkcionalitāte agrāk vai vēlāk būs vajadzīga. Tas NAV peinta analogs ar 1 papildfīču un komandrindas interfeisu. tas ir pilnvērtīgs, daudzfunkcionāls rīks, kurš ļoti labi nodrošinās tavas vajadzības, lai koncentrētos nevis uz JPG/BMP/GIF/PSD hederiem un formātiem utml "kitchen sink" detaļām, bet uz problēmām un algoritmiem.

 

kaut vai 3 kadri - muša lido zigzagā. salīdzini pirmo ar otro, otro ar trešo. dabūsi 2 bildītes ar izmaiņām - katrā pa 2 punktiem (no kurienes uz kurieni bijusi kustība). atrodi kontūras, savelc līnijas starp tiem. Un būs iegūts kustības vektors.

..

Profit!

 

Kad būs izpratne, kā vispār kaut ko var izdarīt un izvilkt loģiku, tad varēsi burties cauri BMP failu formāta specenei un implementēt dekoderi. Ja būs vēl vēlme. Kustību noteikšana bez algoritma izpratnes ir aptuveni kā vēlme apceļot Sibīriju, ar mugursomu plecos izejot kājām no Rīgas un cerot atgriezties pārskatāmā laikā. Labākajā gadījumā bez plaša redzesloka un iemaņām apmaldīsies kaut kur ap Ādažiem.

 

 

Paskaties uz šito topiku kaut vai - http://stackoverflow.com/questions/30756891/image-processing-approachĻoti labs piemērs, kā ar ImageMagick + mazliet programmēšanas var dabūt ļoti labus rezultātus.

 

Vārdu sakot, ja autors tiešām nopietni vēlas ķerties pie bilžu apstrādes, sakarību noteikšanas utml, tad ImageMagick + tā funkciju izsaukšana un loģikas pieprogrammēšana ir risinājums 90% gadījumu.

post-62394-0-23529600-1438778332_thumb.jpg

 

^-- edz kur piemērs loģikas noteikšanai attēlā. labu veiksmi implementējot to pašam un maldoties 3 priedēs nedēļu un secinot, ka "programmēšana sūkā". ja alternatīvas ir karte, ceļvedis, GPS, jautājumus atbildēt spējīgs, pieredzējis gids (dokumentācija un sources principu saprašanai) un transports piedevām. Izvēlies ko vēlies, skaties ko izvēlējies.

Un vēl - lai būtu jēga no programmēšanas, IR jāprogrammē. sākot no elementārām lietām, nevis prasot, kā darīt tā, kā tie vingrotāji tur cirkā dara, lidojot pa gaisu un kur nokačāt tādu koordināciju, spēku un atstrādātas iemaņas.

Labots - usver
  • Patīk 3
Link to comment
Share on other sites

@@usver, tas stackoverflow "uzdevums" atgādināja kādu raidījumu - How It's Made - Potato Chips. Reāla problēma - vajag kvalitatīvus čipsus, bez brūnumiem u.c. defektiem. Kā tas atrisināts? Lido tie čipsi mega ātrumā, "visparastākā" video kamera to visu filmē, defektīvie tiek aizpūsti prom.

Link to comment
Share on other sites

Raimonds1
(labots)

Droši vien melnumi skaitās 1 nieki baitā un tiek apstrādāti ar kādu no bitwise funkcijām.

Labots - Raimonds1
Link to comment
Share on other sites

Un brūnumi (nevis melnumi)? Čipsi ar robiem? Uz pusēm salūzuši čipsi? Pārāk ovālas formas čipsi? Pārāk izliekti čipsi? Un kā to visu tādā ātrumā apstrādāt? Un kā nodrošināt, ka tiek aizpūsts pareizais čips (nevis 10 čipsi pēc kārtas, no kuriem viens varbūt ir tas defektīvais, ja ļoti paveicas)?

 

Grozies kā gribi, problēma nav tik vienkārša kā "vieninieks baitā un bitwise funkcijas" ;)

Link to comment
Share on other sites

Raimonds1

 

 

paskaties vēl - tai programmai ir gan funkcijas, gan API dažādām valoldām (funkcionalitātes iekļaušana tavējā softā), kura funkcionalitāte agrāk vai vēlāk būs vajadzīga. Tas NAV peinta analogs ar 1 papildfīču un komandrindas interfeisu. tas ir pilnvērtīgs, daudzfunkcionāls rīks, kurš ļoti labi nodrošinās tavas vajadzības, lai koncentrētos nevis uz JPG/BMP/GIF/PSD hederiem un formātiem utml "kitchen sink" detaļām, bet uz problēmām un algoritmiem.

 

Līdz tam tāds diezgan patāls ceļš vēl ejams. Vismaz es tagad zinu, ko var izdarīt un ko var dabūt gatavu, ja ir doma, ko vajag.

 

Pasaktījos uz to savu cipariņu bildīti un izdomāju, ka tur vispār tikai 2 vērtības ir, kam var dot 0 un 1 un tos visus baitus apstrādāt ar bitwise operācijām.

Link to comment
Share on other sites

 

 

Līdz tam tāds diezgan patāls ceļš vēl ejams.

Cik soļus līdz šim esi nogājis? Nu tā pavisam nopietni. Nevis padomājis, bet reāli nogājis.

  • Patīk 1
Link to comment
Share on other sites

Raimonds1

Piemēram, 1 baitu apstrādā ar bitwise compliment operatoru - visas 0 nu ir 1 un visi 1 nu ir 0.

Pēc tam ar Bitwise X OR (exclusive or) operatoru. tas dod 1 pret attiecīgo bitu, ja tie atšķiras salīdzināmajiem baitiem.


Tad nu visi 8 vienninieki nozīmē, ka šie abi ir vienādi skaitļi.


Un tā tālāk, salīdzinot visas rindiņas, var dabūt to objektu, ir tur viņš parādījies vai nav.


Un šeit tik tiešām ir kaut kas no loģikas shēmām.


Vēl ir jāizdomā, kā ar tiem bitwise shift noteikt objekta lielumu un kaut kad kaut kā pēc tam jau var domāt par kādu jaunu programmu, kur tas viss būs smuki uzrakstīts apkopotā veidā.

 

Kas, protams, nebūs ne 10-to daļu tik funkcionāla, kā tās augstākminētās attēla apstrādes programmas.

Link to comment
Share on other sites

Komentārs garš un "daudzdaļīgs", bet nu man ir aizdoma, ka vienīgā pareizā frāze - pati pēdējā (un tā pati izklausās stipri optimistiska).

  • Patīk 3
Link to comment
Share on other sites

Raimonds1

Kā ar  compliment operatoru un XOR (exclusive or) salīdzināt 2 blakusesošās 0 un 1 rindiņas?

Link to comment
Share on other sites

Tik pat nepareizi kā viss pārējais komentārs.

Link to comment
Share on other sites

Raimonds1
(labots)

Es sapratu, ka var salīdzināt.

Vai tad compliment operators nepārvērš to baitu, mainot katru 0 uz 1 un otrādi?

Labots - Raimonds1
Link to comment
Share on other sites

Raimonds1

Es te mēģinu pateikt, ka salīdzināt divas rindiņas 00101010 un 10010101 var, izmantojot bitewise operatorus.

 

Vispirms compliment operators vienai no tām rindiņām samaina visus 1 pret 0 un 0 pret 1 un tad šo pārveidoto rindiņu un "attēlā" blakusesošo rindiņu apstrādā ar XOR operatoru.

Link to comment
Share on other sites

Mezavecis

Tavs uzskaitītais piemērs derētu tad, ja bilde būtu melnbalta un objekts homogēns. Krāsu (24-bit) bildes gadījumā tu pliku sievieti nespēsi ar savu algoritmu atrast bildē/video, pat ja cilvēks bez brillēm to varēs ieraudzīt :D Reālā vidē ir tikai un vienīgi kompleksi objekti analīzei un ideālie apstākļi ir tikai izpētes laboratorijā.

 

Piemēram, 1 baitu apstrādā ar bitwise compliment operatoru - visas 0 nu ir 1 un visi 1 nu ir 0.
Link to comment
Share on other sites

Raimonds1
(labots)

Laikam jau vispirms jāsāk ar parastiem punktiem 8x8 laukumā.

 

Pēc tam var domāt tālāk, kur tur kas attēlots, cik tādus laukumus vajag un kas notiek, ja attēlu neveido tikai 0 un 1 punkti, bet katram punktam ir savas īpašības.

 

Jebkurā gadijumā savā pašreizējā izpratnes līmenī es varu iztēloties tos bitwise operatorus, jo tas ir kaut kas no loģikas, visi tie pārveidojumi un pārbīdes utt.

 

Es saprotu, ka tās iedotās adreses uz reālām programmām ir labas, paldies par to,  un neviens tādā bitu un baitu līmenī neķēpājas, bet mani vairāk interesē tieši šis pamata process, kā tā programma tiek izveidota, ka tur ir viens vai divi vārdi - iezīmē robežu vai atrodi punkta koordinātes un kā tas tiek panākts.

Labots - Raimonds1
Link to comment
Share on other sites

Mezavecis

Es jau minēju piemēru, kādas ir tava algoritma robežas, jo cilvēka seju pēc bildes pēc tavas pieejas ir neiespējami atrast. Tāpēc, piemēram, OpenCV "apmāca", lai spētu izšķirt nianses. Reālās programmas neanalizē kaut kāds 8x8 laukumus, bet veselus apgabalus, jo cilvēks tak nav ne apaļš, ne kantains un ne vienkrāsains.  

Link to comment
Share on other sites

 

 

Es saprotu, ka tās iedotās adreses uz reālām programmām ir labas, paldies par to, un neviens tādā bitu un baitu līmenī neķēpājas, bet mani vairāk interesē tieši šis pamata process, kā tā programma tiek izveidota, ka tur ir viens vai divi vārdi - iezīmē robežu vai atrodi punkta koordinātes un kā tas tiek panākts.

Ķēpājas arī bitu un baitu līmenī, kāds (es pat teiktu - veselas komandas) taču tos softus un libus izstrādā. Bet ar "ķēpāšanos" sāk nodarboties tad, kad jau ir nopietna saprašana un reāla pieredze par to visu. Tev pagaidām nav (un tuvāko gadu laikā noteikti nebūs) ne viens, ne otrs.

 

p.s. Lai salīdzinātu divus skaitļus, tos ir gluži vienkārši jāsalīdzina, nevis jāizpilda NOT vienam skaitlim, jāveic XOR starp šo rezultātu un otru skaitli un pēc tam gala rezultātu jāsalīdzina ar 0.

Link to comment
Share on other sites

Izskatās, ka @Raimonds1 ir vienkārši par slinku un kūtru, lai mācītos ko jaunu, maļ tikai savus bitus un mikroshēmas. Sen jau būtu datoram pieslēdzis webkameru, paņēmis gatavu opencv kodu no daudzajiem tutoriāļiem utt...

  • Patīk 2
Link to comment
Share on other sites

Raimonds1
(labots)

Nu nezinu, mans priekšstats ir tāds, ka, lai darbotos ar bitiem un baitiem, ar to arī ir jāsāk.

 

 Ir dažas idejas, kāpēc tieši XOR, nevis vienkārša salidzināšana.

 

Par problēmu ar krāsām un pustoņiem pagaidām vienigais, ko varu iztēloties, ir attēla vienkāršošana un atsevisķa analīze pa pamatkrāsām.

 

Jebkurā gadījumā tas viss nāk pēc tam, kad ir izdomāts, ko darīt ar 0 un 1 punktiem. Tikai pēc tam tam fonam un tam objektam parādīsies vairāk par 1 vērtību. Tad vai nu to izdomāto algoritmu var izmantot, vai arī tam ir ierobežojumi vai ir jādomā viss no jauna. 

 

Es pagaidam nekādi nepretendēju uz normāla, krāsaina attēla vai videokadra apstrādi, bet gan uz jauna  objekta atrašanu 8x8 vai 64x64 punktu "bildītē". Varbūt vēlāk uzzīmēšu čipsi ar robu un melnumu un domāšu, ko un kā darīt. Un no sākuma, protams, attēla punktam būs tikai 0 un 1.  Nekāda dzeltenuma, tikai gaišs attēls uz tumša fona, varbūt 3 dimensijās uz 64x64 laukuma.

 

 

Reāla problēma - vajag kvalitatīvus čipsus, bez brūnumiem u.c. defektiem. Kā tas atrisināts? Lido tie čipsi mega ātrumā, "visparastākā" video kamera to visu filmē, defektīvie tiek aizpūsti prom.

 

 

Un brūnumi (nevis melnumi)? Čipsi ar robiem? Uz pusēm salūzuši čipsi? Pārāk ovālas formas čipsi? Pārāk izliekti čipsi? Un kā to visu tādā ātrumā apstrādāt? Un kā nodrošināt, ka tiek aizpūsts pareizais čips (nevis 10 čipsi pēc kārtas, no kuriem viens varbūt ir tas defektīvais, ja ļoti paveicas)?   Grozies kā gribi, problēma nav tik vienkārša kā "vieninieks baitā un bitwise funkcijas"
Labots - Raimonds1
Link to comment
Share on other sites

Droši vien melnumi skaitās 1 nieki baitā un tiek apstrādāti ar kādu no bitwise funkcijām.

 

 

aha, un šitajā bildē visu izdara gravitācija - objekti taču kosmosā savstarpēji pievelkas, tāpēc viņiem tas sanāk!

Es taču esmu mācījies par kosmosu, visu zinu! Objekti pievelkas, jedritvai! Prasta gravitācija te visu dara, man viss skaidrs! Un noteikti ar 9.81*m/s2 var aprēķināt visu! Pareizinam ar katra masu un būs skaitlis, kādu vajag, atbilde un recepte gatava! :D

59833724.flyas.jpg

 

Dabā viss ir sarežģītāk kā iedomājies. Aizmirsti XOR, aizmirsti gravitāciju - viss NAV tik vienkārši, pat ja kaut kur, kaut kādā detaļā no visa tas arī figurēs.

 

Nu nezinu, mans priekšstats ir tāds, ka, lai darbotos ar bitiem un baitiem, ar to arī ir jāsāk.

Sāc! vispirms pastumdi planētas, pēc tam pievērsies pavisai citai problēmsfērai - sportam. Nevis jauc abas kišmišā, mēģinot visu izskaidrot ar gravitāciju starp sportistiem. Katram sava vieta - arī āmurs un skrūvgrieznis NAV savstarpēji aizstājami, lai gan abi nodarbojas ar metāla iedabūšanu citā virsmā. Viens vienai sfērai, otrs - otrai. Nedomā, ka visu var izskaidrot ar 1 savu mīļāko principu vai izdarīt visu ar savu mīļāko darbarīku ;)

Labots - usver
Link to comment
Share on other sites

Raimonds1
(labots)
Izskatās, ka Raimonds1 ir vienkārši par slinku un kūtru, lai mācītos ko jaunu, maļ tikai savus bitus un mikroshēmas. Sen jau būtu datoram pieslēdzis webkameru, paņēmis gatavu opencv kodu no daudzajiem tutoriāļiem utt...

 

Protams, ka tā arī varētu darīt. 

 

Es protams savā veidā nonākšu pie tā, ka būs jāmacās tās bibliotēkas un gatavie risinājumi.

pagaidām lasu šo http://www.toves.org/books/bitops/

Labots - Raimonds1
Link to comment
Share on other sites

Tīri interesei - kādu programmēšanas valodu un kompilatoru plāno izmantot? Kuras klases datu nolasīšanai?

Vai arī sāksi ar savas megaOS taisīšanu, lai "viss no pamatiem"?

Link to comment
Share on other sites

usver, sāks viņš ar sava CPU "zīmēšanu" uz mm papīra, lai skaitļus var salīdzināt ar xor, jo modernie CPU ar savām necilajām abstraktajām instrukcijām ir "pārāk tāli no dzelžiem" :mrgreen:

Labots - binary
Link to comment
Share on other sites

Raimonds1

Es saprotu, kādas ērtības un izstrādes ātrums ir iespējams, ja darbojas ar labām programmām un to, ka reāls programmu izstrādes kantoris un pasūtītāji pieprasa gatavas, ērtas programmas, kas pielāgotas pasūtītāja vajadzībām.

 

Tās gatavās programmas ar bibliotēkām priekš manis pagaidām ir par sarežģītu untur ir jau pārāk gatavs, izstrādāts algoritms un es tikai vēl meklēju pieeju šo procesu saprašanai.

 

Nu kaut kā tā nu ir sagadijies, ka tagad man ir priekšstats, ka jāsāk ir tā, kaut kāda jēga un rezultāti gan jau būs.

Link to comment
Share on other sites

Mezavecis

Bet tu jau arī gribi sākt ar attēlu apstrādi, kas pats par sevi ir sarežģīts process, it sevišķi, zema līmeņa valodās, ko pat studentiem neliek mācīties. Sāc ar kaut ko vienkāršāku un tad arī skaidrība un reālais ieguvums būs lielāks.

Link to comment
Share on other sites

Raimonds1

 

 

Tīri interesei - kādu programmēšanas valodu un kompilatoru plāno izmantot? Kuras klases datu nolasīšanai? Vai arī sāksi ar savas megaOS taisīšanu, lai "viss no pamatiem"?

 

Es saprotu, ka šī laikam ir bezmaz vai zaimošana, bet pagaidam mani interesē, ko PRINCIPĀ  ar to vai citu valodas rīku var izdarīt, bet pati reālā programma, sintakse un visa ta kopā dabūšana strādāt pagaidām ir otršķirīgs jautājums. 

Link to comment
Share on other sites

nezinu, kas ir valodas rīks (apgaismosi?), taču valodas izvēle ir tas, kas nosaka iespējas integrēt kaut kur. Grafiti uz A5 formāta lapiņas diez ko nerullē un izšūšana uz betona sienas arī ne. Tātad izdomā vispirms, kur gribēsi redzēt rezultātu.

Nu un prasmes daudz ko nosaka.

 

ja vebs tuvāks un to visu integrēsi vebā, lai nekas nav jākačā un jāinstalē lai paskatītos, tad vebiska valoda noderēs.

ja gribas uz vindozēm un lai vienkārši GUI uztaisīt bez īpašas pieredzes - .NET.

ja visām platformām gribas uzreiz dot ārā ar 1 izpildāmfailiņu (JAR) - Java noderēs.

 

Tās visas iespējas noreducējas uz tavām prasmēm (pagaidām neviena valoda?) un pieejamo/ērto bibliotēku klāstu.

Labots - usver
  • Patīk 1
Link to comment
Share on other sites

  • 4 weeks later...
Raimonds1

Palasīju literatūru, pārlasīju tēmas atbildes un laikam sapratu, kur ir tā lieta. Vienkārši manas vēlmes pēc tāda mācību procesa un tādiem materiāliem, kādus es gribētu, ir diezgan atšķirīgas un realizējamas individuālās konsultācijās, nevis standarta kursos vai pašmācībā. kur aiziet ļoti daudz laika, vispār saprotot, kas vispār der un kas neder.

 

Nu, piemēram, ja es lasu C tutoriāli, man saprašanai vajadzētu uzreiz tehniskus piemērus, kur un kā to visu lietot.

Specifiskus, tieši man domātus, ko pieejamie materiāli nedod un ir ilgi jāmeklē un jāliek kopā, lai ko saprastu.

 

Pie tam es te esmu ieciklējies nevis uz kaut kāda tur attēla punktu apstrādi vai mikroshēmām, bet uz materiāliem un mācību vidi un iespējām konsultēties, kur  VISPĀR ir pieejama tāda atsķirīga pieeja jau pašā valodas mācību sākumā. Izskatās, ka tas ir deficīts. 

 

Nu, piemēram, par tiem pašiem bitwise operatoriem un to izmantošanu tādi piemēri uz lapusēm 100 derētu. Ar skaidrojumiem, protams, kas, kā un kāpec tieši tiek darīts lai panāktu kaut ko.

Labots - Raimonds1
Link to comment
Share on other sites

Kautkas te nelīmejas kopā, tu saki ka saproti elektroniku, bet tanī pašā laikā tev nav skaidri bitwise operatori. Tie tak paši pamati ciparu elektronikai (OR, AND, XOR utt), kādus tur vēl piemērus uz 100lpp vajag?

Reku skaidri izstāstīts kā viņi darbojas http://www.programiz.com/c-programming/bitwise-operators

Reku daži vienkāršāki pielietojumi https://graphics.stanford.edu/~seander/bithacks.html

Reku jau daudz un sarežģītāki triki https://graphics.stanford.edu/~seander/bithacks.html

Link to comment
Share on other sites

Raimonds1

Nu jā, tas ir par lietu, tik man tur laikam konsultants jāņem, lai saprastu.

 

Vēl tāda interesanta lieta - vai nezinātājam, kā man, lasot Kena un Ričija C valodas pamatgrāmatu un tās aprakstu par bitwise operatoriem 167. lapā var rasties vispār doma, kā tos varētu izmantot, vai vieglāk tā radīsies, lasot tādu materiālu, kur tās 0 un 1 rindiņas ir uzrakstītas, kā ir un kā izskatīsies pēc katras operācijas. Tajās AndrisBB adresēs gan ir paša C pamatgrāmatas autora piemēri arī.

---------------------

Pēc tiem materiāliem - es pareizi sapratu - var neķēpāties, rakstot tos 1 un 0 rindiņā, bet gan tā decimālās  skaitīšanas sistēmas ekvivalentu ( vai astotnieku, vai 16-nieku), ko tad pārveido pirms tās bitwise operācijas? Te, piemēram http://www.microbuilder.eu/Tutorials/Fundamentals/Bitwise.aspx 

 

unsigned int orig = 0xF0F0; // 1111 0000 1111 0000

unsigned int insert = 0x000A; // 0000 0000 0000 1010

Kā tas ietekmē ātrumu?

 

-----------------------------

Nejauši atradu bitwise un krāsu bildes punktu apstrādes saikni, meklējot bitwise operāciju ātrumu

http://programmers.stackexchange.com/questions/13798/what-are-the-advantages-of-using-bitwise-operations

 izskatas, ka es uz dullo, neko nezinot, esmu bridis pareizā virzienā

 

http://stackoverflow.com/questions/15668718/why-were-bitwise-operations-slightly-faster-than-addition-subtraction-operations   te par ātrumu


 

 

Kautkas te nelīmejas kopā, tu saki ka saproti elektroniku,

 

Mana izpratne balstās uz to, ka es saprotu, kā darbojas šis  http://www.farnell.com/datasheets/1846165.pdf

un kaut ka gribas startēt tajā C valodā no tā.

Labots - Raimonds1
Link to comment
Share on other sites

Vēl tāda interesanta lieta - vai nezinātājam, kā man, lasot Kena un Ričija C valodas pamatgrāmatu un tās aprakstu par bitwise operatoriem 167. lapā var rasties vispār doma, kā tos varētu izmantot, vai vieglāk tā radīsies, lasot tādu materiālu, kur tās 0 un 1 rindiņas ir uzrakstītas, kā ir un kā izskatīsies pēc katras operācijas. Tajās AndrisBB adresēs gan ir paša C pamatgrāmatas autora piemēri arī.

Kaut kā no nepareizās puses tu vēlies tam pieiet. Ir jāmeklē rīkus problēmas risināšanai, nevis jāmeklē problēmas rīku pielietošanai.

 

Pēc tiem materiāliem - es pareizi sapratu - var neķēpāties, rakstot tos 1 un 0 rindiņā, bet gan tā decimālās skaitīšanas sistēmas ekvivalentu ( vai astotnieku, vai 16-nieku), ko tad pārveido pirms tās bitwise operācijas?

(..)

Kā tas ietekmē ātrumu?

Pilnīgi nekā tas neietekmē ne ātrumu, ne izmēru. Tas ietekmē tikai koda rakstāmību / lasāmību, t.i., to, cik viegli ir to kodu uzrakstīt un pēc tam uzturēt (labot, papildināt). C kods nav tas, ko dators galu galā izpildīs. C nokompilēsi, dabūsi kaut kādu nebūt bināru failu - to tad arī dators izpildīs. Normālā gadījumā pat tai binārajā failā pat nebūs "tieša C koda interpretācija", būs pa virsu kompilatora veiktas optimizācijas.

 

To succeed today you must be in a constant state of adaptation – continually unlearning old ‘rules’ and relearning new ones. That requires continually questioning assumptions about how things work, challenging old paradigms, and ‘relearning’ what is now relevant in your job, your industry, your career and your life.

Tāds silts ieteikums - ņem to komentāru vērā… Dzīvē noderēs, turklāt jebkurā jomā… Citādi jau tagad izklausies pēc kašķīga īgņas, kuram "viss ir slikti" tikai tāpēc, ka kaut kas strādā citādāk nekā tu to esi iedomājies. Negribas pat iedomāties, kādi teksti nāks no tevis pēc 10, 20, 50 gadiem.

 

Aizmirsti to elektroniku, aizmirsti savas shēmas vai sazin vēl ko. Atbrīvo savu prātu no tās "zināšanu un pieredzes nastas". Ja tas izdosies un būsi atvērts jaunām zināšanām, jaunām pieejām, kas *nav* (un nevar būt) balstītas uz iepriekšējām zināšanām - varbūt (tikai *varbūt*) varēsi veiksmīgi saprast kaut ko programmēšanā.

 

Protams, kad ķersies klāt elektronikai, tad vecās zināšanas noderēs. Varbūt. Bet ļoti iespējams, ka nenoderēs. Kā man sencis reiz teica - tad, kad sāka parādīties visādi "gudrie čipi", tad "vecajiem bukiem" bija ļoti grūti tos pieņemt un pielietot. Sak', vieglāk un drošāk ir uztaisīt atsevišķu platīti nekā paņemt gatavu mikročipu - tad vismaz zini, kā tā platīte strādā. Bet ar tādu pieeju grūti kaut kur tikt. It īpaši, kad "jaunie buki" tos mikročipus "ēd brokastīs" (t.i., labprāt pielieto visur, kur vajag un kur nevajag).

 

Edit: Par to citātu - atslēgas frāze ir "learn, unlearn, relearn". Vari pagooglēt, ko par to saka dažādi cilvēki.

Labots - binary
Link to comment
Share on other sites

unsigned int orig = 0xF0F0; // 1111 0000 1111 0000

unsigned int insert = 0x000A; // 0000 0000 0000 1010 Kā tas ietekmē ātrumu?

Baigi ietekmē attīstības ātrumu. Skaldot matus, izstrādātājs neattīstās uz jēdzīgām lietām, bet skatās uz matiem un to nogriešanas leņķi. Un rezultātā sanāk frizieris, kura specializācija ir mati, nevis programmētājs, kura specializācija ir taisīt noderīgas lietas. Tas tā, uz pirkstiem.

 

P.S: ja domāji konkrēto definēšanu, tad arī neietekmē. intedžers ir intedžers.

 

 

var rasties vispār doma, kā tos varētu izmantot, vai vieglāk tā radīsies, lasot tādu materiālu, kur tās 0 un 1 rindiņas ir uzrakstītas, kā ir un kā izskatīsies pēc katras operācijas.

 

dzīvs piemērs no bitwise pielietošanas: visādos protokolos utml tu vari iebāzt ierobežotu datu apjomu. Piemēram, viens baits atvēlēts.

 

vienā baitā ir 8 pozīcijas (biti): 0000 0000

 

Tev no tā 1 baita ir jāizpīpē, kādas permisijas/flagi ir ir konkrētajam avotam. teiksim, tev gribas iedot atļauju

 1) lasīt 

 2) rakstīt

 3) svilpot melodiju

 4) vicināties ar rokām

 5) saķemmēties

 6) pasmaržot puķīti 

 7) novaibstīties spogulī

 

Permisijas var dot dažādas, neatkarīgi vienu no otras.

 

Tātad - mēs netaisamies baigo asociatīvo masīvu taisīt ar permisijām. mēs esam maza iekārta, kas saņem 1 baitu un citu avotu nav.

Risinājums: apzīmējam katru permisiju ar masku (kas ir skaitlis):

 

1) int READ_MASK == 0x01 ==   0000 0001

2) int WRITE_MASK == 0x02 ==  0000 0010

3) int WHISTLE_MASK = 0x04 =  0000 0100

4) int GESTURE_MASK = 0x08 = 0000 1000

 

.. un tā tālāk pa katru bitu aizpildot, nodefinējot konkrētā cilvēka/instances permisijas.

 

int RAIMONDS_PERMISSIONS = WHISTLE_MASK | GESTURE_MASK | SMELL_FLOWER_MASK;

 

To arī sūtam, 1 baitā iekļaujas. Un kodā pārbaude šādā veidā: 

 

if (RAIMONDS_PERMISSIONS & WHISTLE_MASK) {

   // ir tiesības svilpot

}

 

Rezultātā mēs esam 1 bitā sabāzuši daudz dažādu neatkarīgu permisiju, kuras varam pēc tam noskaidrot. Precizitātes labad vēlams izmantot "unsigned char" vai citu baitu daudzumam atbilstošu datu tipu vērtību uzglabāšanai, lai nejauši nepārsniegtu to baitu limitu, ierakstot lielākas vērtības kā tur var ierakstīt.

 

Lūdzu, doma, kā to izmantot. Dažādos protokolos un permisijās lieto, kur biti ir ierobežoti un C/C++ runājas ar dzelzi (starpā nav datubāzu, interneta, freimvorku baigo, abstrakciju, objektu vai citu no-dzelža-attālinošo faktoru). Palasi "bitwise permissions", tad arī atradīsi kaudzi piemēru, šitais tik no prakses.

Labots - usver
Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...