| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Бит тест на int32 число http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=4495 |
Страница 1 от 1 |
| Автор: | michev [ Сря Юли 11, 2007 10:28 am ] | |||||||||
| Заглавие: | Бит тест на int32 число | |||||||||
Здравейте. От скоро започнах да се занимавам с avr микроконтролери. Вчера седнах да пиша една програмка за ATmega8, която да ми управлява чип свързан към MCU-то (lmx2306). Всичко вървеше нормално докато не се сблъсках със следния проблем - нужно е да проверя дали бит Н от едно 20 битово число е = 1. Начина по който го направих определено е нещо грешен или аз пропускам нещо.
Въпроса ми е - къде греша и има ли друг начин да направя това? Поздрави, Десислав Мичев |
||||||||||
| Автор: | BrainStorm [ Сря Юли 11, 2007 10:38 am ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
пробваи така:
|
|||||||||||||||||||
| Автор: | Yanek [ Сря Юли 11, 2007 10:59 am ] | |||||||||
| Заглавие: | ||||||||||
Може и така:
По този начин си спестяваш труда да знаеш колко битово е числото, т.е. на кой бит се намира най-старшата единица. Още нещо да кажа: Възможно е ако нямаш код в блока с условието оптимизатора да пренебрегва изцяло условието. Ако си сигурен, че е изключен значи причината е другаде; |
||||||||||
| Автор: | Gogo [ Сря Юли 11, 2007 11:13 am ] | |||||||||
| Заглавие: | ||||||||||
Пробвай така:
|
||||||||||
| Автор: | michev [ Сря Юли 11, 2007 11:14 am ] |
| Заглавие: | |
Много БЛАГОДАРЯ Yanek! Грешката била вярна Изключих го и всичко тръгна. |
|
| Автор: | michev [ Сря Юли 11, 2007 11:21 am ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
Както казах - начинаещ съм, но ми се вижда нелогично да резервирам 4 байта за mask при условие чи винаги е единица. Или нещо не съм разбрал идеята ти? |
|||||||||||||||||||
| Автор: | michev [ Сря Юли 11, 2007 11:46 am ] | |||||||||
| Заглавие: | ||||||||||
Та в крайна сметка се получи работещ код
Благодаря за бързите отговори и хубавите идеи. |
||||||||||
| Автор: | Gogo [ Сря Юли 11, 2007 12:01 pm ] | |||||||||
| Заглавие: | Re: Бит тест на int32 число | |||||||||
Може би аз не те разбрах или не си задал правилно въпроса си!
По начина на @Yanek става, но условието ще се изпълни на всяка срещната еденица, а не само ако бит Н е "1". Освен това, стойността на cmd след проверката ще се промени. Ако е без значение - добре, но не си го упоменал в "заданието". |
||||||||||
| Автор: | michev [ Сря Юли 11, 2007 12:09 pm ] | ||||||||||||||||||||||||||||||||||||
| Заглавие: | Re: Бит тест на int32 число | ||||||||||||||||||||||||||||||||||||
В мен е проблема
Тука не схващам. Каква е разликата м/у двата начина при условие че въртя цикъл за да премина през всичките 21 бита на cmd?
Нека се променя. Така или инъче за да програмирам LMX2306 трябва да извикам функцията 3 пъти с 3 различни стойности на cmd. |
|||||||||||||||||||||||||||||||||||||
| Автор: | Yanek [ Сря Юли 11, 2007 1:31 pm ] |
| Заглавие: | Re: Бит тест на int32 число |
michev, така или иначе вече си го направил. Освен това твоя и на Gogo начини са идентични. Реално при сравнението все едно ще се заемат 4 байта, независимо дали е обявено като локална променлива mask или не е. На компилатора така или иначе са му необходими 4 байта за да шифтва дали mask дали единицата. |
|
| Автор: | \__ [ Сря Окт 03, 2007 11:24 am ] | |||||||||
| Заглавие: | ||||||||||
|
||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|