Перейти к содержанию
Друзья, важная новость! ×

Рекомендуемые сообщения

Книжек найти что то не могу а по памяти никак.

Как совершить над 2 числами операцию "ИЛИ"??

то есть:

1 1 - 1

1 0 - 0

0 1 - 0

0 0 - 0

И можно ли вообще?

Ссылка на комментарий
Поделиться на другие сайты

Paskal

1 or 1

Исключающее xor

C++

Исключающее или ^

Просто или |

Изменено пользователем Mr.Woland-DCLXVI
Ссылка на комментарий
Поделиться на другие сайты

Paskal

1 or 1

Исключающее xor

C++

Исключающее или ^

Просто или |

То есть как это написать?

P:

a:=b or c

C++:

a=b ^ c

так?

а если числа 16 разрядные? )

Изменено пользователем D'Kard Kain
Ссылка на комментарий
Поделиться на другие сайты

ну видимо побитово , логика ?

Так было бы здорово если бы к биту скажем переменной типа word можно было обратиться )) В этом вся и загвоздка!

Есть идея умножать например на 00001000 и свотреть что получилось чтоб знать что в каком бите ) Но для этого нужно что бы ИЛИ работало )

[Добавлено позже]

Логические операции применимы только к логическим типам переменных (в TP - Boolean).

Или к условиям в ветвлении.

Так булины же есть и 2 байтовые вроде?? А как туда что записать? )) Например 10101010 ? :)

Изменено пользователем D'Kard Kain
Ссылка на комментарий
Поделиться на другие сайты

Кайн, мне думается ты, как это часто бывает, путаешь "что нужно" и "как именно"

Ты скажик акова твоя задача. а мы тебе скажем как ее решить

Изменено пользователем Darth Pandarian
Ссылка на комментарий
Поделиться на другие сайты

Кайн, мне думается ты, как это часто бывает, путаешь "что нужно" и "как именно"

Ты скажик акова твоя задача. а мы тебе скажем как ее решить

Задача:

У меня данные с датчиков храняться двубайтовыми словами. Что бы передать данные по SPI нужно выставлять в определенное время на шину определенные биты.

Но на C++ и на Pascal я не могу обратиться к биту напрямую. я пытаюсь как то вытащить эти биты из слов.

Ссылка на комментарий
Поделиться на другие сайты

а битовое смещение не пробовал ?

на Паскале уже не помню, но вроде rsift, lshift.

А на С++ << и >>

Изменено пользователем Mr.Woland-DCLXVI
Ссылка на комментарий
Поделиться на другие сайты

а битовое смещение не пробовал ?

на Паскале уже не помню, но вроде rsift, lshift.

А на С++ << и >>

А подробнее? :)

Ссылка на комментарий
Поделиться на другие сайты

ну в Си установить нужный бит:

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

}

Ссылка на комментарий
Поделиться на другие сайты

ну в Си установить нужный бит:

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 ? )) исключающее ИЛИ ?

Изменено пользователем D'Kard Kain
Ссылка на комментарий
Поделиться на другие сайты

Слушай супер!! Я знал что Асемблер нужен )))
Использование ассемблера там где он и даром не нужен - дурной тон в профессиональном программировании. На С все твои задачи решаются простейшим образом. Изменено пользователем Nit
Ссылка на комментарий
Поделиться на другие сайты

ассемблер не нужен. для Си точно:) я просто не в курсе насчет тонкостей в паскале.

да xor это побитовое исключающее ИЛИ.

ассемблерные вставки для паскаля я кстати неправильно оформил там другие вроде операторные скобки.

А можно как нибудь бит вытащить в булин или вытащить в байт но поставить его на первое место что бы чист офизически получалось 0 или 1 ?

для Си. переменная "к" устанавливается в значение 3го бита переменной "a".

int k=0;

if (a&0х20) k=1;

для поскаля надо прикинуть.. для делпхи или ТП? наверняка можно без ассемблера, надо просто хелп про операторы перечитать:)

ЗЫ Nit прав насчет ассемблера. я привел на крайний случай - как бы я сделал если бы надо было срочно чтобы работало:)

Изменено пользователем CrazyFun
Ссылка на комментарий
Поделиться на другие сайты

для Си. переменная "к" устанавливается в значение 3го бита переменной "a".

int k=0;

if (a&0х20) k=1;

для поскаля надо прикинуть.. для делпхи или ТП? наверняка можно без ассемблера, надо просто хелп про операторы перечитать:)

ЗЫ Nit прав насчет ассемблера. я привел на крайний случай - как бы я сделал если бы надо было срочно чтобы работало:)

Мне не для дельфи ) Да фиг с ним все равно никто не поймет, пусть будет асемблер )

А хелпа у меня просто нету )))

Почему 3ий бит это 0х20 ? ))) Что то я туплю )

П.С. Мне надо и на Си и на паскале написать на Си для микроконтроллера на Паскале для души ))

Использование ассемблера там где он и даром не нужен - дурной тон в профессиональном программировании. На С все твои задачи решаются простейшим образом.

Про Си охотно верю ) Но паскаль тож нужен )

Изменено пользователем D'Kard Kain
Ссылка на комментарий
Поделиться на другие сайты

0х20=00100000b

мда это 6й.. ну или 3й слева.. чото безделье съело мой моск:)

вот тут есть операторы delphi. я смотрю там есть все что есть в Си. под заголовкам 2.4.5. Операции с битами:

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1172

Ссылка на комментарий
Поделиться на другие сайты

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 прав насчет ассемблера. я привел на крайний случай - как бы я сделал если бы надо было срочно чтобы работало:)
Есть еще стадия устранения багов в любом серьезном программном комплексе. Вполне возможно, что этим будет заниматься не автор кода (особенно если по прошествию некоторого времени) и сотрудник другой квалификации. Смешивание языков программирования превратится в большую проблему. Поэтому без крайней необходимости такое просто запрещено в серьезных фирмах. Изменено пользователем Nit
Ссылка на комментарий
Поделиться на другие сайты

Так получается что бы вытащить 3ий бит в паскале надо написать что то типа:

If (a or $08)=0 then k:=0; else k:=1;

думаю да - проверяй:). тока первая ";" лишняя.

Ссылка на комментарий
Поделиться на другие сайты

думаю да - проверяй:). тока первая ";" лишняя.

Ваааа!!! все заработало!!! Ураа!! Всех целую всем спасибо! ))))))))

Только там не ИЛИ надо было а И )) непонимаю как я мог перепутать всю жизнь думал что ИЛИ это та таблица истенности которую в первом посте привел )) аннет )

Изменено пользователем D'Kard Kain
Ссылка на комментарий
Поделиться на другие сайты

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
×
×
  • Создать...