Цитата:
Но когда мы пишем m = n++; мы учитываем все особенности этой операции. Что такое побитовая операция? Если просто так сказать, то можно подозревать, что мы берем битовое представление аргумента (если это вещественное число, то все его 64 разряда м мантиссой и порядком) и работаем с этими битами. Но это не так. Мы же учитываем, что оно сначала преобразуется в 32 разрядное целое. Что такое логическая операция &&? В фортране или паскале тоже есть логические операции (.AND. и and соответственно). Но если он пришел в js, то стек ни стек, а как выполняется && знать придется. Так же как придется знать, что во что прeобразуется при '10'+1 и при '01' == 1 и при x|0 |
Не сравнивайте с ++ или &&.
Побитовые операции - очень редкие на самом деле по статистике использования в web стеке, использовать их для других задач - ненужно усложнять код такими низкоуровневыми деталями. Вон в доках есть более забористые вещи - ~str.indexOf("Widget") - как аналог != -1 , из всего этого можно такую шифрограмму составить, как будто ни Роберт Мартин ни Фаулер никогда и ни для кого своих книг не писали |
Я вот люблю битовые флаги, типа:
const Action = { DEFAULT: 0b000000000, // do nothng DELETE: 0b000000001, // to trash ARCHIVE: 0b000000010, // to archive FINALIZE: 0b000000100, // remove "new" label and star ADD_LABEL: 0b000001000, // add specified label READ: 0b000010000, // mark as read } ... return Action.READ | Action.ARCHIVE | Action.FINALIZE; ... if(action & Action.ARCHIVE) { removeInboxIds.push(id); } Но сейчас такое уже считается сложна, эх... |
Используются иногда.
Например в createNodeIterator https://developer.mozilla.org/en-US/...teNodeIterator Но чаще в С |
const access = (value, action) => Boolean( value & { read: 1, create: 2, edit: 4, delete: 8, }[action] ); for (let i = 0; i < 16; i++) { let res = []; if (i & 1) res.push('read'); if (i & 2) res.push('create'); if (i & 4) res.push('edit'); if (i & 8) res.push('delete'); console.log(i, res, (i).toString(2).padStart(4, '0')); } console.log(access(3, 'edit')); console.log(access(15, 'delete')); Редко, но используем, в базах данных с типами set, enum без них никак |
Цитата:
А раз разницы нет - есть свобода для проявления индивидуально творческого стиля. Иногда вообще пишут «I+++j»…:-/ Цитата:
const C_Struct = { Field_1 :1, // 1 бит Field_2 :2, // 2 бита Field_3 :2, // 2 бита Field_4 :3 // 3 бита } var MyFields = { _struct :C_Struct, Fields :0x9D } function Read_CStruct(Struct, Field) { var i = 0; for(var id in Struct._struct) { if(id == Field) return (Struct.Fields >> i) & ~(-1 << Struct._struct[id]); i += Struct._struct[id]; } } console.log(`Field_3: ${Read_CStruct(MyFields, "Field_3")}`); |
Цитата:
|
voraa, а я бы нет.)
|
Цитата:
исходный код должен понятен большинству а там может быть сборщик, минификатор, обфускатор ... |
Цитата:
Вспоминается COBOL, где надо было писать MULTIPLY X BY Y. А что? Всем ведь понятно. X*Y не каждому дано понять. |
Часовой пояс GMT +3, время: 20:34. |