Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.07.2012, 11:25
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

Побитовое NOT.
Побитовое not заменяет каждый бит операнда на противоположенный:
// 0000 - это ноль
alert(~0) // -1
// Но если заменить каждый бит на противоположенный: 1111 - 15.
// Почему так?

P.S. почему же тогда ~ работает как: -(х+1) ??
__________________
оляля, ололо
Ответить с цитированием
  #2 (permalink)  
Старый 14.07.2012, 11:38
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Заменяет каждый бит операнда включая знаковый
Ответить с цитированием
  #3 (permalink)  
Старый 14.07.2012, 11:40
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

Deff,
эм..немного не понял
__________________
оляля, ололо
Ответить с цитированием
  #4 (permalink)  
Старый 14.07.2012, 11:40
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

alert(~1) // -1
Ответить с цитированием
  #5 (permalink)  
Старый 14.07.2012, 12:36
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

Deff,
О_О
Вообще-то -2)
Так-с, я могу сейчас глупость сказать, но знаковый бит, это самый первый?

Все спасибо, приблизительно понял
__________________
оляля, ололо

Последний раз редактировалось 9xakep, 14.07.2012 в 12:53.
Ответить с цитированием
  #6 (permalink)  
Старый 14.07.2012, 12:48
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от 9xakep
это самый первый?
Да - именно так
Сообщение от 9xakep
Вообще-то -2)
(*-1 Эт Ваша строка - скопировал без правки
Ответить с цитированием
  #7 (permalink)  
Старый 14.07.2012, 13:24
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

не то чтобы доказательство, но может прояснит немного картину:
  • Переполнение. Целочисленные переменные (в javascript такие "возникают" во время побитовых операций) имеют фиксированный размер. Если прибавить очень большое число, непоместившиеся биты "обрежуться", в частности (правила по аналогии с десятичной системой):
    Код:
     0101b
    +
    10000b
    ------
     0101b
  • Дополнительный код (дополнение до двух) - распространенный формат, в котором хранятся отрицательные числа. Половина значений отводятся под положительные числа, половина - под отрицательные:
    Код:
    1000b (-8) .. 1111b (-1), 0000b, 0001b (1) .. 0111b (7)
    Соответственно, чтобы получить отрицательное число, надо вычесть модуль из нуля, или, что то же самое, из 10000b (16) (в случае 4-битных чисел, в общем случае из 2^N, где N - количество битов):
    Код:
    10000b
    -
     0010b
    -------
     1110b
  • Дополнение до единицы - еще один формат, нераспространенный. Модуль числа получается с помощью операции NOT, например:
    Код:
    ~0001b = 1110b
    ~0010b = 1101b
    т.е. получается следующая картина:
    Код:
    1000b (-7) .. 1110b (-1), 1111b (-0), 0000b, 0001b (1) .. 0111b (7)
    и 1) отрицательные числа как бы смещены на один влево, 2) на образовавшемся месте появился отрицательный ноль
  • ~a = 1111b - a (хз, почему так получается), 1111b = (10000b - 1) ("разница" между форматами равна единице)
    Код:
    1111b
    -
    0001b
    -----
    1110b
Ответить с цитированием
  #8 (permalink)  
Старый 14.07.2012, 13:40
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Вообще побитовая инверсия равна вычитанию из -1

alert(~2) // -3
alert(~3) // -4
alert(~4) // -5
Ответить с цитированием
  #9 (permalink)  
Старый 14.07.2012, 16:39
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

Не, нуприблизительлно я все-таки понял, возьмем 4 бита:
0001 = 1
~0001 = 1110 = -2, проверим это:
1111 = -1,
1110+
1111
====
1101 = -3, т.к. 0101 = 3, у нас 4 бита, 1 бит - знаковость, значит 1101 = -3
чтд: 1110 = -2

Только у меня последний вопрос, скорее из части информатики:
Почему -1, это 1111, а не 1001 (если 4 бита)?
__________________
оляля, ололо

Последний раз редактировалось 9xakep, 14.07.2012 в 16:42.
Ответить с цитированием
  #10 (permalink)  
Старый 14.07.2012, 16:45
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

x-yuri,
Спасибо, но я мало что понял). Что значит b, в конце каждого числа?
__________________
оляля, ололо
Ответить с цитированием
Ответ



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

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