DKardKain Опубликовано 6 февраля, 2008 Жалоба Поделиться Опубликовано 6 февраля, 2008 Книжек найти что то не могу а по памяти никак. Как совершить над 2 числами операцию "ИЛИ"?? то есть: 1 1 - 1 1 0 - 0 0 1 - 0 0 0 - 0 И можно ли вообще? Ссылка на комментарий Поделиться на другие сайты Поделиться
Mr.Woland-DCLXVI Опубликовано 6 февраля, 2008 Жалоба Поделиться Опубликовано 6 февраля, 2008 (изменено) Paskal 1 or 1 Исключающее xor C++ Исключающее или ^ Просто или | Изменено 6 февраля, 2008 пользователем Mr.Woland-DCLXVI Ссылка на комментарий Поделиться на другие сайты Поделиться
DKardKain Опубликовано 6 февраля, 2008 Автор Жалоба Поделиться Опубликовано 6 февраля, 2008 (изменено) Paskal 1 or 1 Исключающее xor C++ Исключающее или ^ Просто или | То есть как это написать? P: a:=b or c C++: a=b ^ c так? а если числа 16 разрядные? ) Изменено 6 февраля, 2008 пользователем D'Kard Kain Ссылка на комментарий Поделиться на другие сайты Поделиться
Snorky Опубликовано 6 февраля, 2008 Жалоба Поделиться Опубликовано 6 февраля, 2008 Логические операции применимы только к логическим типам переменных (в TP - Boolean). Или к условиям в ветвлении. Ссылка на комментарий Поделиться на другие сайты Поделиться
mrPandarian Опубликовано 6 февраля, 2008 Жалоба Поделиться Опубликовано 6 февраля, 2008 а если числа 16 разрядные? ) ну видимо побитово , логика ? Ссылка на комментарий Поделиться на другие сайты Поделиться
DKardKain Опубликовано 6 февраля, 2008 Автор Жалоба Поделиться Опубликовано 6 февраля, 2008 (изменено) ну видимо побитово , логика ? Так было бы здорово если бы к биту скажем переменной типа word можно было обратиться )) В этом вся и загвоздка! Есть идея умножать например на 00001000 и свотреть что получилось чтоб знать что в каком бите ) Но для этого нужно что бы ИЛИ работало ) [Добавлено позже] Логические операции применимы только к логическим типам переменных (в TP - Boolean). Или к условиям в ветвлении. Так булины же есть и 2 байтовые вроде?? А как туда что записать? )) Например 10101010 ? :) Изменено 6 февраля, 2008 пользователем D'Kard Kain Ссылка на комментарий Поделиться на другие сайты Поделиться
mrPandarian Опубликовано 6 февраля, 2008 Жалоба Поделиться Опубликовано 6 февраля, 2008 (изменено) Кайн, мне думается ты, как это часто бывает, путаешь "что нужно" и "как именно" Ты скажик акова твоя задача. а мы тебе скажем как ее решить Изменено 6 февраля, 2008 пользователем Darth Pandarian Ссылка на комментарий Поделиться на другие сайты Поделиться
DKardKain Опубликовано 6 февраля, 2008 Автор Жалоба Поделиться Опубликовано 6 февраля, 2008 Кайн, мне думается ты, как это часто бывает, путаешь "что нужно" и "как именно" Ты скажик акова твоя задача. а мы тебе скажем как ее решить Задача: У меня данные с датчиков храняться двубайтовыми словами. Что бы передать данные по SPI нужно выставлять в определенное время на шину определенные биты. Но на C++ и на Pascal я не могу обратиться к биту напрямую. я пытаюсь как то вытащить эти биты из слов. Ссылка на комментарий Поделиться на другие сайты Поделиться
Mr.Woland-DCLXVI Опубликовано 6 февраля, 2008 Жалоба Поделиться Опубликовано 6 февраля, 2008 (изменено) а битовое смещение не пробовал ? на Паскале уже не помню, но вроде rsift, lshift. А на С++ << и >> Изменено 6 февраля, 2008 пользователем Mr.Woland-DCLXVI Ссылка на комментарий Поделиться на другие сайты Поделиться
DKardKain Опубликовано 6 февраля, 2008 Автор Жалоба Поделиться Опубликовано 6 февраля, 2008 а битовое смещение не пробовал ? на Паскале уже не помню, но вроде rsift, lshift. А на С++ << и >> А подробнее? :) Ссылка на комментарий Поделиться на другие сайты Поделиться
CrazyFun Опубликовано 6 февраля, 2008 Жалоба Поделиться Опубликовано 6 февраля, 2008 ну в Си установить нужный бит: byte a; a=a|0х20; //установит в 1 3й байт в 8ми битной переменной. т.е. на месте взводимого бита 1 на остальных 0 сбросить нужный бит в 0: byte a; a=a&0xDF; //0хDF=11011111b - на месте сбрасываемого бита 0. на остальных 1. пример для байта.1 для позкаля хз:) в крайнем случае так: установить 3й бит в байте var a:byte; ........... asm { mov al,a or al,00100000b mov a,al } сбросить 3й бит в байте asm { mov al,a xor al,11011111b mov a,al } Ссылка на комментарий Поделиться на другие сайты Поделиться
DKardKain Опубликовано 6 февраля, 2008 Автор Жалоба Поделиться Опубликовано 6 февраля, 2008 (изменено) ну в Си установить нужный бит: byte a; a=a|0х20; //установит в 1 3й байт в 8ми битной переменной. т.е. на месте взводимого бита 1 на остальных 0 сбросить нужный бит в 0: byte a; a=a&0xDF; //0хDF=11011111b - на месте сбрасываемого бита 0. на остальных 1. пример для байта.1 для позкаля хз:) в крайнем случае так: установить 3й бит в байте var a:byte; ........... asm { mov al,a or al,00100000b mov a,al } сбросить 3й бит в байте asm { mov al,a xor al,11011111b mov a,al } Слушай супер!! Я знал что Асемблер нужен ))) А можно как нибудь бит вытащить в булин или вытащить в байт но поставить его на первое место что бы чист офизически получалось 0 или 1 ? :) П.С. Что такое xor ? )) исключающее ИЛИ ? Изменено 6 февраля, 2008 пользователем D'Kard Kain Ссылка на комментарий Поделиться на другие сайты Поделиться
Nit Опубликовано 6 февраля, 2008 Жалоба Поделиться Опубликовано 6 февраля, 2008 (изменено) Слушай супер!! Я знал что Асемблер нужен )))Использование ассемблера там где он и даром не нужен - дурной тон в профессиональном программировании. На С все твои задачи решаются простейшим образом. Изменено 6 февраля, 2008 пользователем Nit Ссылка на комментарий Поделиться на другие сайты Поделиться
CrazyFun Опубликовано 6 февраля, 2008 Жалоба Поделиться Опубликовано 6 февраля, 2008 (изменено) ассемблер не нужен. для Си точно:) я просто не в курсе насчет тонкостей в паскале. да xor это побитовое исключающее ИЛИ. ассемблерные вставки для паскаля я кстати неправильно оформил там другие вроде операторные скобки. А можно как нибудь бит вытащить в булин или вытащить в байт но поставить его на первое место что бы чист офизически получалось 0 или 1 ? для Си. переменная "к" устанавливается в значение 3го бита переменной "a". int k=0; if (a&0х20) k=1; для поскаля надо прикинуть.. для делпхи или ТП? наверняка можно без ассемблера, надо просто хелп про операторы перечитать:) ЗЫ Nit прав насчет ассемблера. я привел на крайний случай - как бы я сделал если бы надо было срочно чтобы работало:) Изменено 6 февраля, 2008 пользователем CrazyFun Ссылка на комментарий Поделиться на другие сайты Поделиться
DKardKain Опубликовано 6 февраля, 2008 Автор Жалоба Поделиться Опубликовано 6 февраля, 2008 (изменено) для Си. переменная "к" устанавливается в значение 3го бита переменной "a". int k=0; if (a&0х20) k=1; для поскаля надо прикинуть.. для делпхи или ТП? наверняка можно без ассемблера, надо просто хелп про операторы перечитать:) ЗЫ Nit прав насчет ассемблера. я привел на крайний случай - как бы я сделал если бы надо было срочно чтобы работало:) Мне не для дельфи ) Да фиг с ним все равно никто не поймет, пусть будет асемблер ) А хелпа у меня просто нету ))) Почему 3ий бит это 0х20 ? ))) Что то я туплю ) П.С. Мне надо и на Си и на паскале написать на Си для микроконтроллера на Паскале для души )) Использование ассемблера там где он и даром не нужен - дурной тон в профессиональном программировании. На С все твои задачи решаются простейшим образом. Про Си охотно верю ) Но паскаль тож нужен ) Изменено 6 февраля, 2008 пользователем D'Kard Kain Ссылка на комментарий Поделиться на другие сайты Поделиться
CrazyFun Опубликовано 6 февраля, 2008 Жалоба Поделиться Опубликовано 6 февраля, 2008 0х20=00100000b мда это 6й.. ну или 3й слева.. чото безделье съело мой моск:) вот тут есть операторы delphi. я смотрю там есть все что есть в Си. под заголовкам 2.4.5. Операции с битами: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1172 Ссылка на комментарий Поделиться на другие сайты Поделиться
DKardKain Опубликовано 6 февраля, 2008 Автор Жалоба Поделиться Опубликовано 6 февраля, 2008 0х20=00100000b мда это 6й.. ну или 3й слева.. чото безделье съело мой моск:) вот тут есть операторы delphi. я смотрю там есть все что есть в Си. под заголовкам 2.4.5. Операции с битами: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1172 Так получается что бы вытащить 3ий бит в паскале надо написать что то типа: If (a or $08)=0 then k:=0; else k:=1; прально? :) Ссылка на комментарий Поделиться на другие сайты Поделиться
Nit Опубликовано 6 февраля, 2008 Жалоба Поделиться Опубликовано 6 февраля, 2008 (изменено) ЗЫ Nit прав насчет ассемблера. я привел на крайний случай - как бы я сделал если бы надо было срочно чтобы работало:)Есть еще стадия устранения багов в любом серьезном программном комплексе. Вполне возможно, что этим будет заниматься не автор кода (особенно если по прошествию некоторого времени) и сотрудник другой квалификации. Смешивание языков программирования превратится в большую проблему. Поэтому без крайней необходимости такое просто запрещено в серьезных фирмах. Изменено 6 февраля, 2008 пользователем Nit Ссылка на комментарий Поделиться на другие сайты Поделиться
CrazyFun Опубликовано 6 февраля, 2008 Жалоба Поделиться Опубликовано 6 февраля, 2008 Так получается что бы вытащить 3ий бит в паскале надо написать что то типа: If (a or $08)=0 then k:=0; else k:=1; думаю да - проверяй:). тока первая ";" лишняя. Ссылка на комментарий Поделиться на другие сайты Поделиться
DKardKain Опубликовано 6 февраля, 2008 Автор Жалоба Поделиться Опубликовано 6 февраля, 2008 (изменено) думаю да - проверяй:). тока первая ";" лишняя. Ваааа!!! все заработало!!! Ураа!! Всех целую всем спасибо! )))))))) Только там не ИЛИ надо было а И )) непонимаю как я мог перепутать всю жизнь думал что ИЛИ это та таблица истенности которую в первом посте привел )) аннет ) Изменено 6 февраля, 2008 пользователем D'Kard Kain Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти