 
			
				05.09.2022, 10:07
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 03.02.2020 
					
					
					
						Сообщений: 2,777
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от micscr
			
		
	 | 
 
	| 
		Все подробности выполнения побитовой операции полезно знать когда у тебя задача работать с битами, а у нас задача - привести число к целому.
	 | 
 
	
 
 Что такое n++? Это увеличение n на единицу? Вроде бы да. 
Но когда мы пишем m = n++; мы учитываем все особенности этой операции. 
Что такое побитовая операция? Если просто так сказать, то можно подозревать, что мы берем битовое представление аргумента (если это вещественное число, то все его 64 разряда м мантиссой и порядком) и работаем с этими битами. Но это не так. Мы же учитываем, что оно сначала преобразуется в 32 разрядное целое.
 
Что такое логическая операция &&? В фортране или паскале тоже есть логические операции (.AND. и and соответственно). Но если он пришел в js, то стек ни стек, а как выполняется && знать придется. Так же как придется знать, что во что прeобразуется при '10'+1 и при '01' == 1 и при x|0  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось voraa, 05.09.2022 в 10:09.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				05.09.2022, 10:28
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 10.09.2009 
					
					
					
						Сообщений: 1,578
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Не сравнивайте с ++ или &&. 
Побитовые операции - очень редкие на самом деле по статистике использования в web стеке, использовать их для других задач - ненужно усложнять код такими низкоуровневыми деталями. 
Вон в доках есть более забористые вещи - ~str.indexOf("Widget") - как аналог != -1 , из всего этого можно такую шифрограмму составить, как будто ни Роберт Мартин ни Фаулер никогда и ни для кого своих книг не писали 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				05.09.2022, 10:56
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Тлен 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.01.2010 
					
					
					
						Сообщений: 6,601
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Я вот люблю битовые флаги, типа: 
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 
 
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
	
		
	
		
		
		
			
			 
			
				05.09.2022, 12:07
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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.
				Причина: Добавил для наглядности в двоичной системе
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				05.09.2022, 13:55
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Кандидат Javascript-наук 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 16.08.2018 
					
					
					
						Сообщений: 113
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от 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.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				05.09.2022, 16:57
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 03.02.2020 
					
					
					
						Сообщений: 2,777
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Vlasenko Fedor
			
		
	 | 
 
	| 
		Редко, но используем, в базах данных с типами set, enum без них никак
	 | 
 
	
 
 Я бы  Boolean(...) на !!(...) заменил    
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				05.09.2022, 18:49
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Тлен 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.01.2010 
					
					
					
						Сообщений: 6,601
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 voraa, а я бы нет.) 
		
	
		
		
		
		
		
			
				__________________ 
				29375, 35 
 
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				05.09.2022, 19:29
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 13.03.2013 
					
					
					
						Сообщений: 1,572
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Aetae
			
		
	 | 
 
	| 
		voraa, а я бы нет
	 | 
 
	
 
 100% 
исходный код должен понятен большинству 
а там может быть сборщик, минификатор, обфускатор ...  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				05.09.2022, 20:16
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 03.02.2020 
					
					
					
						Сообщений: 2,777
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Vlasenko Fedor
			
		
	 | 
 
	| 
		исходный код должен понятен большинству
	 | 
 
	
 
 Печально, что большинство такое.... непонятливое
 
Вспоминается COBOL, где надо было писать  MULTIPLY X BY Y. 
А что? Всем ведь понятно. X*Y не каждому дано понять.  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось voraa, 05.09.2022 в 20:50.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |