реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> битовая арифметика, битовое условие
Lepeksiy
сообщение Jun 5 2008, 14:27
Сообщение #16


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 25-04-07
Пользователь №: 27 294



Цитата
При проверке условия на уровне ассемблерных инструкций идет сравнение значения выражения с нулем

Какое это имеет значение? Мы тут наглядность на си рассматриваем, а не ассемблер.
А в таких случаях, как в примере выше, avr-gcc (при включенной оптимизации) использует SBIC или SBIS.
Цитата
Так что прошу от вас обоснования, почему нельзя в условии явно с нулем сравнивать?

Да сравнивайте, кто ж вам не дает smile.gif
Я разве утверждал что нельзя?? Я писал, что вариант без явного сравнения кажется мне более наглядным.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 6 2008, 01:29
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Lepeksiy @ Jun 5 2008, 20:27) *
Какое это имеет значение?
Большое. Стиль написания на языке ЯВУ, который приближает программу к такой же, написанной на ASM, дает наиболее эффективный код.
Цитата(Lepeksiy @ Jun 5 2008, 20:27) *
Я писал, что вариант без явного сравнения кажется мне более наглядным.
Да где же тут наглядность, если не понятно с чем сравнивать и как результат сравнения определять? laughing.gif
Сраваните сами
Код
if ((tmp&BIT0)!=0)
  var=1;
else
  var=0;

Читаем/расшифровываем выражение: если при битовой операции tmp AND BIT0 результат не равен нулю, то переменной var присвоим значение 1, иначе - значение 0.
Теперь ваш вариант
Код
if (tmp&BIT0)
  var=1;
else
  var=0;

Пытаемся расшифровать: если при битовой операции tmp AND BIT0 .... а дальше чего? В этом месте нужно помнить, что где-то по умолчанию предполагается, что 0 это false, а не 0 это true. И исходя из этого предположения выбирать действие. А если вдруг окажется что true это 0, а false совсем наоборот? laughing.gif То, что вы ни разу с таким не сталкивались, не означает что такого не бывает никогда. Эталон сравнения в вашем варианте условия зарыт где-то далеко какими-то умолчаниями и/или хедерами. Ну и где тут ваша пресловутая "наглядность"? wink.gif
Go to the top of the page
 
+Quote Post
vet
сообщение Jun 6 2008, 04:30
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



rezident, при чём тут true/false? в plain C и слов-то таких нет;
выражение в if () проверяется именно что на неравенство нулю, в любом случае. Выражение вида a!=b имеет свой результат - ноль или не ноль соответственно.
Лично мне выражение с опущенным !=0 также представляется более естественным (для битовых операций; сравнение чисел с нулем лучше читается в явном виде). И уж конечно, такой стиль ближе к ассемблерному - в ассемблерном коде ветвление обычно ставится сразу же после наложения битовой маски, без лишних сравнений.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 6 2008, 05:00
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Stanislav_S @ Jun 5 2008, 14:02) *
Для наглядности можно так:
#define MASK 0x01
if(PINX>>N&MASK==MASK)

Можете смело участвовать в конкурсе по запутыванию sad.gif. Это даже не "на любом языке можно писать, как на Accемблере", это круче.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Tiny
сообщение Jun 6 2008, 05:00
Сообщение #20


Частый гость
**

Группа: Участник
Сообщений: 82
Регистрация: 10-07-06
Пользователь №: 18 720



Я не программист, и до сих пор я считал, что на Си запись
if (tmp&BIT0)
означает в любом случае: Если выражение tmp&BIT0 равно 0, то результат if ЛОЖНОНО. В противном случае - ИСТИНО. Разве в этом плане есть разные варианты?
На PHP я попал с этим в просак. По привычке из Си, Си++ я писал подобным образом. А когда на сервере поменяли PHP4 на PHP5 моя база данных перестала работать. Пришлось повозиться пару часов, чтобы понять, что нужно писать полностью типа if(A>0). Тогда все заработало.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 6 2008, 05:03
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(vet @ Jun 6 2008, 06:30) *
Лично мне выражение с опущенным !=0 также представляется более естественным..

Более того оно так и есть на самом деле smile.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
rv3dll(lex)
сообщение Jun 6 2008, 05:05
Сообщение #22


Полное ничтожество
*****

Группа: Banned
Сообщений: 1 991
Регистрация: 20-03-07
Из: Коломна
Пользователь №: 26 354



Цитата(ЧипХрум @ Jun 3 2008, 10:01) *
Програмирую на AVRStudio под atmega32 , делаю сигналку себе на авто.
Програмирую на си.
1.Испытываю затруднение по обращению к биту порта в условии.
к примеру

if ((бит порта)==1)
или
if ((бит порта)==0)


07.gif
да времена настали - зачем использовать для битовых операций (в сигналке почти всё будет такое) контроллер который для этого не очень предназначен??? немудрено))) что для большинства достаточно pic16 а то и pic12 или 51 где не то что делать отдельную операцию чтения а всё сравнение и переход будет одной командой ассемблера - что наиболее наглядно .

JB P2.1 METKA_1
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 6 2008, 05:16
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Tiny @ Jun 6 2008, 07:00) *
Разве в этом плане есть разные варианты?

Никаких вариантов нет.
Выражения if( (a & MASK)!=0 ) ничего кроме трудностей чтения выражений "масло маслянное с добавлением скобок" не добавляют.


Цитата(rv3dll(lex) @ Jun 6 2008, 07:05) *
да времена настали - зачем использовать для битовых операций (в сигналке почти всё будет такое) контроллер который для этого не очень предназначен???

Контроллер "не очень предназначенный для битовых операций". "Чернила для третьего класса"
занимают отныне занимают второе место.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 6 2008, 10:25
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Ладно. Вижу что бесполезно убеждать. Обсуждаемый вопрос больше относится к культуре/стилю написания программ. Если человек легко обходится при еде руками и ложкой, то убеждать его в том, что кушать лучше с ножем и вилкой, как это принято у культурных людей, видимо не имеет смысла.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 6 2008, 11:39
Сообщение #25


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Потом выяснится, что культурные люди кушают только в ресторане, да ещё в костюме и при галстуке smile.gif

А дома вообще жрать нельзя smile.gif


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
rv3dll(lex)
сообщение Jun 6 2008, 12:02
Сообщение #26


Полное ничтожество
*****

Группа: Banned
Сообщений: 1 991
Регистрация: 20-03-07
Из: Коломна
Пользователь №: 26 354



есть надо руками - для этого они и нужны!!!

если бы ножом и вилкой было удобно есть - то в процессе эволюции ноготь указательного пальца правой руки превратился в нож а левой руки в вилку.

некоторые ещё считают что вилку надо держать в левой руке - бред yeah.gif надо держать её так как удобнее 08.gif

Цитата(zltigo @ Jun 6 2008, 09:16) *
занимают отныне занимают второе место.


за такие деньги можно купить rfpic и не думать о горождении радио брелка. или штуки 3 простых пиков
Go to the top of the page
 
+Quote Post
Stanislav_S
сообщение Jun 6 2008, 15:33
Сообщение #27


извечный пессимист
*****

Группа: Свой
Сообщений: 1 113
Регистрация: 9-10-06
Из: Днепропетровск
Пользователь №: 21 125



Цитата(zltigo @ Jun 6 2008, 10:00) *
Можете смело участвовать в конкурсе по запутыванию sad.gif. Это даже не "на любом языке можно писать, как на Accемблере", это круче.

Почему? Хотя конечно объявлять MASK через define лишнее.


--------------------
Slaves are those of this world
Given freedom to lay chains upon The Master
The wolf is no longer free
Release the chains and come for me
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th July 2025 - 00:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01568 секунд с 7
ELECTRONIX ©2004-2016