2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Дискретная. Логические операции между словами разной длинны?
Сообщение12.09.2007, 15:36 
Есть задача, нужно проверить некую 32-х битную последовательность на пренадлежность к одной из инструкций "I" - легальная = 1 иначе 0.
Нужная инстуркция содержит всегда 0 в старших 6 битах, по середке может быть все подряд и младшие 6 бит принимают следующие значения
01 0000
01 0001

и от 00 0000 до 00 1111
Есть решение:
рез = not I[31:26] and (I[5:4] or not{I[5] and I[4] and I[3:1]})
мне не совсем ясно как считается в этом случае. Допустим я еще понимаю not I[31:26] - тут мы получаем просто 1, но потом как...

 
 
 
 
Сообщение12.09.2007, 16:08 
Аватара пользователя
Вы хотите создать решение или понять существующее?

Может быть, проще сделать что-то вроде

res = ( x < (1<<26)) && ( (x&63) < 18)

 
 
 
 
Сообщение12.09.2007, 21:14 
Я хотел бы конечно сначала разобраться с уже готовым решением, а потом попробовать найти новое. Я думал, что любое слово в котором есть хотя бы один бит отличный от 0 считается правдой. Это предположение действует на первую часть решения и вторую, т.е. I[31:26] всегда 0 => их отрицание всегда 1. Потом I[5:4] в двух случаях принимает значение 01 и тогда считается 1. Но дальше не понятно, почему если I[5:4] = 00 мы отдельно проверяем и 5 и 4 бит и уж совесм не понятно почему проверяется с 3 по 1 бит и уж тем более зачем когда они могут принимать любое значение от 0000 и до 1111?

 
 
 
 
Сообщение12.09.2007, 22:08 
Аватара пользователя
Насколько я могу понять, у Вас в записи следующая ошибка: не должно быть фигурных скобок. Второй not должен действовать только на I[5]. Если хотите, можно открывающуюся фигурную скобку перенести перед этим not, хотя это излишне, так как по приоритету and выполняется раньше, чем or. Тогда вроде как все сходится. Либо оба бита 4-5 должны быть нулями, тогда содержимое самых младших годится любое, либо 5-ый ноль, 4-ый единица, с 1 по 3 должны быть нули, а последний любой.

Переношу в Computer Science.

 
 
 
 
Сообщение13.09.2007, 08:57 
То есть мое предположение правильно, любое слово хотя бы с одной 1 - это 1. Просто такое решение меня запутало. Его тогда нужно переписать так

not I[31:26] and (not I[5:4] or not I[5] and I[4] and not I[3:1])

 
 
 
 
Сообщение13.09.2007, 09:34 
Аватара пользователя
Да, похоже все так.

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group