~ - унарный оператор, который выполняет порязрядное инвертирование, в т.е. ~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, время: 16:27. |