Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 05.09.2022, 10:07
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Сообщение от micscr
Все подробности выполнения побитовой операции полезно знать когда у тебя задача работать с битами, а у нас задача - привести число к целому.
Что такое n++? Это увеличение n на единицу? Вроде бы да.
Но когда мы пишем m = n++; мы учитываем все особенности этой операции.
Что такое побитовая операция? Если просто так сказать, то можно подозревать, что мы берем битовое представление аргумента (если это вещественное число, то все его 64 разряда м мантиссой и порядком) и работаем с этими битами. Но это не так. Мы же учитываем, что оно сначала преобразуется в 32 разрядное целое.

Что такое логическая операция &&? В фортране или паскале тоже есть логические операции (.AND. и and соответственно). Но если он пришел в js, то стек ни стек, а как выполняется && знать придется. Так же как придется знать, что во что прeобразуется при '10'+1 и при '01' == 1 и при x|0

Последний раз редактировалось voraa, 05.09.2022 в 10:09.
Ответить с цитированием
  #32 (permalink)  
Старый 05.09.2022, 10:28
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,578

Не сравнивайте с ++ или &&.
Побитовые операции - очень редкие на самом деле по статистике использования в web стеке, использовать их для других задач - ненужно усложнять код такими низкоуровневыми деталями.
Вон в доках есть более забористые вещи - ~str.indexOf("Widget") - как аналог != -1 , из всего этого можно такую шифрограмму составить, как будто ни Роберт Мартин ни Фаулер никогда и ни для кого своих книг не писали
Ответить с цитированием
  #33 (permalink)  
Старый 05.09.2022, 10:56
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

Я вот люблю битовые флаги, типа:
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);
    }

Но сейчас такое уже считается сложна, эх...
__________________
29375, 35
Ответить с цитированием
  #34 (permalink)  
Старый 05.09.2022, 11:08
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Используются иногда.
Например в createNodeIterator
https://developer.mozilla.org/en-US/...teNodeIterator

Но чаще в С
Ответить с цитированием
  #35 (permalink)  
Старый 05.09.2022, 12:07
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

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 без них никак

Последний раз редактировалось Vlasenko Fedor, 05.09.2022 в 17:59. Причина: Добавил для наглядности в двоичной системе
Ответить с цитированием
  #36 (permalink)  
Старый 05.09.2022, 13:55
Аватар для Alikberov
Кандидат Javascript-наук
Отправить личное сообщение для Alikberov Посмотреть профиль Найти все сообщения от Alikberov
 
Регистрация: 16.08.2018
Сообщений: 109

Сообщение от micscr Посмотреть сообщение
Это у вас очень чудное правило.
Которое больше как фонит тем что вы не разобрались в разнице , мол эзотерика. Нет эзотерики, код для шага цикла ничего не возвращает, поэтому для него нет разницы, и писать ++i несколько паливно
Какaя разница в постинкременте или преинкременте там, где это ни на что не влияет?
А раз разницы нет - есть свобода для проявления индивидуально творческого стиля.
Иногда вообще пишут «I+++j»…

Сообщение от Aetae Посмотреть сообщение
Я вот люблю битовые флаги, типа:
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
}
Если идти строго по Си, можно и так:
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")}`);

Последний раз редактировалось Alikberov, 05.09.2022 в 14:01.
Ответить с цитированием
  #37 (permalink)  
Старый 05.09.2022, 16:57
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Сообщение от Vlasenko Fedor
Редко, но используем, в базах данных с типами set, enum без них никак
Я бы Boolean(...) на !!(...) заменил
Ответить с цитированием
  #38 (permalink)  
Старый 05.09.2022, 18:49
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

voraa, а я бы нет.)
__________________
29375, 35
Ответить с цитированием
  #39 (permalink)  
Старый 05.09.2022, 19:29
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Сообщение от Aetae
voraa, а я бы нет
100%
исходный код должен понятен большинству
а там может быть сборщик, минификатор, обфускатор ...
Ответить с цитированием
  #40 (permalink)  
Старый 05.09.2022, 20:16
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Сообщение от Vlasenko Fedor
исходный код должен понятен большинству
Печально, что большинство такое.... непонятливое

Вспоминается COBOL, где надо было писать MULTIPLY X BY Y.
А что? Всем ведь понятно. X*Y не каждому дано понять.

Последний раз редактировалось voraa, 05.09.2022 в 20:50.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как заменить данный кусок кода, чтобы он корректно работал в extjs5? Risa ExtJS 3 05.02.2015 22:24
Чем можно сделать отображение видео на сайте как в примере? Duda.Ml1986@gmail.com Библиотеки/Тулкиты/Фреймворки 0 24.10.2014 11:13
Чем заменить live() ? FRIE jQuery 2 06.10.2014 18:03
Чем заменить вызов GetObject (JS) в Internet Explorer 9 и новее? 13hakta Internet Explorer 0 17.04.2014 15:21
Помогите найти в чем ошибка Pashok Элементы интерфейса 6 26.02.2013 20:20