Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Основы JS по Флэнэгану; (https://javascript.ru/forum/misc/13989-osnovy-js-po-flehnehganu%3B.html)

monolithed 05.01.2011 11:47

Kolyaj я думал знак умножение поставил, а 20 вроде стер, т.к. из другого примера (поторопился, забыл parseInt) :D
upd: поправил

Kepa 05.01.2011 11:57

Ок, спасибо за ответы (:

P.S.
Цитата:

Сообщение от monolithed
alert(parseInt(a)+parseInt(b));

вариант который мне больше нравится, вроде в учебнике на этом сайте подсмотрел такое применение оператора "+" :) :
var a = '10', b = '10';
alert(+a+(+b));

monolithed 05.01.2011 12:00

Цитата:

Сообщение от Kepa
вариант который мне больше нравится, вроде в учебнике на этом сайте подсмотрел такое применение оператора "+"

не стоит рано списывать со счетов parseInt()
alert(parseInt('1число')+parseInt('2число'));

Цитата:

Сообщение от Kepa
alert(+a+(+b));

var a = '10', b = '10';
alert(+a+~~b);

Kepa 05.01.2011 12:11

Цитата:

Сообщение от monolithed (Сообщение 86319)
var a = '10', b = '10';
alert(+a+~~b);

...Тили-тили трали-вали,
Это мы не проходили,
это нам не задавали...

monolithed 05.01.2011 12:15

Kepa в книжке, о которой идет речь, есть раздел "Побитовые операторы"

Kepa 05.01.2011 12:27

Я пока на 78-ой странице из 950, потихонечку доберемся и до них. (:

x-yuri 05.01.2011 14:38

Цитата:

Сообщение от monolithed
А происходит это потому, что ссылочные типы данных не имеют фиксировнного размера и не могут храниться в выделенных 8 байтах памяти.

а откуда взяты 8 байтов? Стандарт требует, чтобы нессылочные типы, в частности булевский, хранились в 8 байтах?

и непонятно, какое отношение имеют твои примеры к передаче параметров в функции...

Цитата:

Сообщение от Kepa
вариант который мне больше нравится, вроде в учебнике на этом сайте подсмотрел такое применение оператора "+": ... alert(+a+(+b));

ага, всем по началу нравится писать шифрованный код. Со временем начинаешь компенсировать лаконичность кода длинными комментариями. Некоторые даже привыкают и говорят, что это круто... ;)

monolithed 05.01.2011 17:58

Цитата:

Сообщение от x-yuri
а откуда взяты 8 байтов?

На сколько я помню, то под переменные содержащие значение элементарных типов данных выделяется (это кстати где-то написано в книге Фленагана) 16 бит (строковой литерал), в тоже время для целых чисел 32 бита, а чисел с плавающей точкой 64 бита, с юникодом отдельная история.
Цитата:

Сообщение от x-yuri
и непонятно, какое отношение имеют твои примеры к передаче параметров в функции...

ТС привел пример конкатенации строк, от него я и отталкивался, возможно не так понял.

x-yuri 05.01.2011 19:37

в первую очередь, я имел в виду, что про 8 байт - это не причина:
Цитата:

Сообщение от monolithed
А происходит это потому, что ссылочные типы данных не имеют фиксировнного размера и не могут храниться в выделенных 8 байтах памяти.

во-вторых, реализация сама решает, как ей хранить переменную
в-третьих, не важно, как она это делает
в-четвертых, отдельная история уже не актуальна

Kepa 06.01.2011 06:41

Пока вы спорите у меня возник новый вопрос :)

Прочитал про поразрядное НЕ (~) и у меня возникло недопонимание - как именно представляются отрицательные целые числа (http://javascript.ru/bitwise-operators - эту статью я тоже читал, но все равно до конца так и не понял), поясню:

Число у нас представляется 32 разрядами, при этом старший (левый) разряд - знаковый, т.е. у нас диапазон чисел, если я правильно понял, от (2^31 - 1) до -(2^31). Далее, как представляются целые положительные числа в двоичной системе мне понятно, 1=1; 2=10; 3=11; 4=100; и т.д., при этом все разряды левее старшей единицы равны 0, а вот как представляются отрицательные мне уже непонятно, ну за тем исключением что старший бит равен 1. Возьмем пример из статьи:

314 = 00000000000000000000000100111010

-314 = 11111111111111111111111011000110

Так вот, что мне здесь непонятно - по какому алгоритму во втором случае мы "получаем" из этой последовательности -314, например мне было бы понятен такой вариант:

-314 = 10000000000000000000000100111010

Но насколько я понимаю он понятен человеку, но очень неудобен для "компьютера" в вычислениях (а может и вообще непригоден), в таком случае мне был бы еще понятен вариант такой:

-314 = 11111111111111111111111011000101

Т.е. это ~314, без "дополнения до двойки" - здесь я бы понимал что мы "получаем" -314 как разность максимального числа (все разряды равны 1) и 314, а старший бит указывает что число отрицательное, но в статье говорится что надо еще прибавить единицу, и вот тут я не понимаю, откуда берется эта единица и почему полученный после "дополнения до двойки" результат будет -314. В целом я подозреваю что тут что-то завязано с арифметикой целых чисел (например, если знаковый бит считать за обычный, то (0-1) будет равно максимальному числу, скажем для 8-ми разрядного без знакового представления 0-1 = 255. Будет здорово если кто-нибудь разжует данный момент (:

P.S. Пока писал еще пришла мысль что это может быть связано с тем что у нас нет "отрицательного" нуля и поэтому у нас отрицательных чисел на одно больше чем положительных, может дело в этом? В любом случае хочется точно знать. :)


Часовой пояс GMT +3, время: 05:30.