~ - унарный оператор, который выполняет порязрядное инвертирование, в т.е. ~1 == 0, ~0 == 1.
Цитата:
|
Цитата:
Цитата:
-314 = 10000000000000000000000100111010 Как такое может быть менее понятно для человека, чем порязрядное отрицание с дополнением до двойки -314 = 11111111111111111111111011000110 я не понимаю, может я вхожу в число тех нескольких индивидуумов? ;) |
Цитата:
откуда берется единица: -0010 = 10000 - 0010 = 1111 - 0010 + 0001 = ~0010 + 0001 фактически, в случае ones' complement мы выбираем в качестве нуля 01111, а в случае two's complement - 10000, т.е. на единицу большее число. В результате (two's complement): у нас один ноль, не надо добавлять к результату бит переноса |
а объяснить все это можно, думаю, так:
нам надо вычесть 0001 (1) из 0010 (2), но мы хотим избавиться от вычитания, т.е. сделать это используя операцию сложения. Отметим, что xxxx + 10000 = xxxx. Тогда 0010 - 0001 = 0010 + 10000 - 0001 = 0010 + <two's complement of 0001> p.s. это бытовое объяснение на пальцах, и я не в курсе как оно видится с точки зрения представителей академической науки |
Цитата:
1. Ситуацию с циклом for: видимо есть какой то шаблон (каркас), на котором можно реализовывать различные варианты циклов for: ( in )? (firstChild, !=null, nextSibling). В частности как работает вариант с firstChild, nextSibling? 2. Все таки ситуацию с sort()-ом, не понять: 2.1 Сравнивающая функция может иметь только 2 аргумента? 2.2 Эти m и n ни что иное как l и r в QuickSort? Как вообще лучше читать такие сорты? А то у меня мозг перегревается их анализировать :) |
x-yuri,
Спасибо, более-менее разобрался (: |
Цитата:
for(<инициализация>;<условие>;<корректирование>){ //тело цикла } Цикл начинает работу (ищит следущий дочерний элемент e) с выражения x = e.firstChild, и работает до тех пор пока не получит значение null (как доберется до несущестующего элемента - e.lastChild+1) Может этот вариант поможет понять: <script type="text/javascript"> window.onload = function(){ var element = document.getElementById('div'), //родительский элемент children = element.childNodes, //дочернии элементы i = children.length, array = []; //получаем количество элементов и создаем пустой массив if(element.hasChildNodes()) { //проверяем есть ли дочернии элементы while(i--){ if(children[i].tagName != undefined) { //отбираем, только те которые не имеют значение undefined array.push(children[i].tagName + ': ' +children[i].innerHTML + '\n'); //добавляем в массив } } } alert(array.join('')); }; </script> <div id="div"> <div>0</div> <div>1</div> <div>2</div> </div> тоже самое (без линих проверок), только пошустрей: var element = document.getElementById('div').childNodes, i = element.length, array = []; while(i--){ array.push(element[i].nodeType == 1 ? element[i].innerHTML + '\n' : ''); } alert(array.join('')); |
<!DOCTYPE HTML> <html> <head> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/mootools/1.3.0/mootools-yui-compressed.js"></script> </head> <body> <ul id="list"> <li>один<li>два<li>три<li>четыре<li>пять </ul> <button>Сортировать</button> <script> $$('button').addEvent('click', function(){ $('list').getChildren() .sort(function(a, b){ if( a.get('text') == b.get('text') ) return 0; return a.get('text') < b.get('text') ? -1 : 1; }) .inject( $('list') ); }); </script> </body> </html> --- var element = document.getElementById('div'), //родительский элемент children = element.childNodes, //дочернии элементы i = children.length, array = []; //получаем количество элементов и создаем пустой массив if(element.hasChildNodes()) { //проверяем есть ли дочернии элементы while(i--){ if(children[i].tagName != undefined) { //отбираем, только те которые не имеют значение undefined array.push(children[i].tagName + ': ' +children[i].innerHTML + '\n'); //добавляем в массив } } } может в каких-нибудь фреймворках такой код и имеет смысл, но только не в real life... Цитата:
Цитата:
Цитата:
|
Цитата:
|
Цитата:
http://javascript.ru/ecma/part8#a-8.5 Цитата:
|
Часовой пояс GMT +3, время: 03:23. |