![]() |
|
||||||||||
|
|
|
|||||
|
блогер
Регистрация: Mar 2010
Адрес: x = stage.stageWidth/2 y= stage.stageHeight/2
Сообщений: 293
Записей в блоге: 2
|
Не подскажете как логически интерпритирровать следующие выражения:
private static function H(arg1:uint, arg2:uint, arg3:uint):uint { return arg1 ^ arg2 ^ arg3; } private static function I(arg1:uint, arg2:uint, arg3:uint):uint { return arg2 ^ (arg1 | !arg3); } private static function G(arg1:uint, arg2:uint, arg3:uint):uint { return arg1 & arg3 | arg2 & !arg3; } |
|
|||||
|
4AM Games
|
Это не столько синтаксис, сколько побитовые логические операторы:
Bitwise XOR ^- http://help.adobe.com/en_US/FlashPla...ml#bitwise_XOR Bitwise OR | - http://help.adobe.com/en_US/FlashPla...tml#bitwise_OR Bitwise AND & - http://help.adobe.com/en_US/FlashPla...ml#bitwise_AND Они работают с бинарным представлением числа, что бы понять, можно поигратся с такиви вещами: trace( "0001 ^ 0010" ); trace( ( 1 ^ 2 ).toString( 2 ) ); trace( "0011 ^ 0010" ); trace( ( 3 ^ 2 ).toString( 2 ) ); trace( "" ); trace( "0001 | 0010" ) trace( ( 1 | 2 ).toString( 2 ) ); trace( "0011 | 0010" ); trace( ( 3 | 2 ).toString( 2 ) ); trace( "" ); trace( "0001 & 0010" ); trace( ( 1 & 2 ).toString( 2 ) ); trace( "0011 & 0010" ); trace( ( 3 & 2 ).toString( 2 ) ); package { import flash.display.Sprite; public class Test extends Sprite { protected static const SWEET:uint = 1; protected static const SOAR:uint = 2; protected static const HOT:uint = 4; protected static const SAVORY:uint = 8; public function Test() { super(); trace( taste( SWEET | SOAR ) ); trace( taste( HOT | SAVORY ) ); trace( taste( SOAR | SAVORY ) ); trace( taste( SWEET | HOT | SOAR ) ); trace( taste( SWEET | SAVORY | HOT | SOAR ) ); } protected function taste( flags:uint ):String { var result:Array = []; if( flags & SWEET ) result.push( "sweet" ); if( flags & SOAR ) result.push( "soar" ); if( flags & HOT ) result.push( "hot" ); if( flags & SAVORY ) result.push( "savory" ); return result.join( " " ); } } }
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^ |
|
|||||
|
блогер
Регистрация: Mar 2010
Адрес: x = stage.stageWidth/2 y= stage.stageHeight/2
Сообщений: 293
Записей в блоге: 2
|
Работаю с адобовским MD5 в оригинальном коде используются операторы ! перед числом инт
и из за этого выскакивает исключение. Implicit coercion но как бороться с этим не знаю, поскольку плохо понимаю эти побитовые сдвиги Добавлено через 1 минуту что теоретически может значить оператор ' ! ' перед числом ?! Может быть замена знака на противоположный ? |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Цитата:
Цитата:
|
|
|||||
|
блогер
Регистрация: Mar 2010
Адрес: x = stage.stageWidth/2 y= stage.stageHeight/2
Сообщений: 293
Записей в блоге: 2
|
Все исправил сравнив разные версии. для корректной работы потребовалось заменить
!int на (~int) Деталей объяснить на смогу. Простите, очень плохо разбираюсь в 32 разрядных операциях |
|
|||||
|
стервочка (я мужик)
|
|
|
|||||
|
блогер
Регистрация: Mar 2010
Адрес: x = stage.stageWidth/2 y= stage.stageHeight/2
Сообщений: 293
Записей в блоге: 2
|
Из вашего источника :
Ряд источников по языкам низкого уровня называет побитовые логические операции просто логическими,[1][2] но в терминологии программирования на языках высокого уровня в названиях битовых операций присутствуют прилагательные битовый, побитовый (например: «побитовое логическое И», оно же «побитовое умножение»), поразрядный. Скорее всего бит и двоичный разряд синонимы. Но в целом вы правы. Спасибо. |
![]() |
![]() |
Часовой пояс GMT +4, время: 07:40. |
|
|
« Предыдущая тема | Следующая тема » |
|
|