Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 05.01.2011, 11:47
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

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

Последний раз редактировалось monolithed, 05.01.2011 в 11:52.
Ответить с цитированием
  #22 (permalink)  
Старый 05.01.2011, 11:57
Интересующийся
Отправить личное сообщение для Kepa Посмотреть профиль Найти все сообщения от Kepa
 
Регистрация: 05.12.2010
Сообщений: 27

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

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

Последний раз редактировалось Kepa, 05.01.2011 в 11:59.
Ответить с цитированием
  #23 (permalink)  
Старый 05.01.2011, 12:00
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

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

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

Последний раз редактировалось monolithed, 05.01.2011 в 12:08.
Ответить с цитированием
  #24 (permalink)  
Старый 05.01.2011, 12:11
Интересующийся
Отправить личное сообщение для Kepa Посмотреть профиль Найти все сообщения от Kepa
 
Регистрация: 05.12.2010
Сообщений: 27

Сообщение от monolithed Посмотреть сообщение
var a = '10', b = '10';
alert(+a+~~b);
...Тили-тили трали-вали,
Это мы не проходили,
это нам не задавали...
Ответить с цитированием
  #25 (permalink)  
Старый 05.01.2011, 12:15
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

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

Последний раз редактировалось monolithed, 05.01.2011 в 12:18.
Ответить с цитированием
  #26 (permalink)  
Старый 05.01.2011, 12:27
Интересующийся
Отправить личное сообщение для Kepa Посмотреть профиль Найти все сообщения от Kepa
 
Регистрация: 05.12.2010
Сообщений: 27

Я пока на 78-ой странице из 950, потихонечку доберемся и до них. (:
Ответить с цитированием
  #27 (permalink)  
Старый 05.01.2011, 14:38
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

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

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

Сообщение от Kepa
вариант который мне больше нравится, вроде в учебнике на этом сайте подсмотрел такое применение оператора "+": ... alert(+a+(+b));
ага, всем по началу нравится писать шифрованный код. Со временем начинаешь компенсировать лаконичность кода длинными комментариями. Некоторые даже привыкают и говорят, что это круто...
Ответить с цитированием
  #28 (permalink)  
Старый 05.01.2011, 17:58
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от x-yuri
а откуда взяты 8 байтов?
На сколько я помню, то под переменные содержащие значение элементарных типов данных выделяется (это кстати где-то написано в книге Фленагана) 16 бит (строковой литерал), в тоже время для целых чисел 32 бита, а чисел с плавающей точкой 64 бита, с юникодом отдельная история.
Сообщение от x-yuri
и непонятно, какое отношение имеют твои примеры к передаче параметров в функции...
ТС привел пример конкатенации строк, от него я и отталкивался, возможно не так понял.

Последний раз редактировалось monolithed, 05.01.2011 в 18:01.
Ответить с цитированием
  #29 (permalink)  
Старый 05.01.2011, 19:37
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

в первую очередь, я имел в виду, что про 8 байт - это не причина:
Сообщение от monolithed
А происходит это потому, что ссылочные типы данных не имеют фиксировнного размера и не могут храниться в выделенных 8 байтах памяти.
во-вторых, реализация сама решает, как ей хранить переменную
в-третьих, не важно, как она это делает
в-четвертых, отдельная история уже не актуальна
Ответить с цитированием
  #30 (permalink)  
Старый 06.01.2011, 06:41
Интересующийся
Отправить личное сообщение для Kepa Посмотреть профиль Найти все сообщения от Kepa
 
Регистрация: 05.12.2010
Сообщений: 27

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

Прочитал про поразрядное НЕ (~) и у меня возникло недопонимание - как именно представляются отрицательные целые числа (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. Пока писал еще пришла мысль что это может быть связано с тем что у нас нет "отрицательного" нуля и поэтому у нас отрицательных чисел на одно больше чем положительных, может дело в этом? В любом случае хочется точно знать.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вывести содержимое PHP файла с помощью JS? pavdin Серверные языки и технологии 6 22.12.2010 14:16
Не получается передать переменную из JS в PHP Lion_astana AJAX и COMET 2 23.11.2010 17:23
помогите задать переменную в js bsgroupua Общие вопросы Javascript 3 01.02.2010 18:28
Вывод JS значения в одну строку в HTML velo Общие вопросы Javascript 7 15.12.2009 03:57
Самая лучшая книга по JS? ulandj Оффтопик 2 06.04.2009 11:35