| 
	| 
	
	| 
		
	| 
			
			 
			
				14.07.2012, 11:25
			
			
			
		 |  
	| 
		
			|  | сегодня в 12:34|Комментир       |  | 
					Регистрация: 12.04.2011 
						Сообщений: 1,180
					 
		
 |  |  
	| 
				Побитовое NOT.
			 Побитовое not заменяет каждый бит операнда на противоположенный: 
// 0000 - это ноль
alert(~0) // -1
// Но если заменить каждый бит на противоположенный: 1111 - 15.
// Почему так?
 
P.S. почему же тогда ~ работает как: -(х+1) ??
				__________________оляля, ололо
 |  |  
	| 
		
	| 
			
			 
			
				14.07.2012, 11:38
			
			
			
		 |  
	| 
		
			
			| без статуса       |  | 
					Регистрация: 25.05.2012 
						Сообщений: 8,219
					 
		
 |  |  
	| Заменяет каждый бит операнда включая знаковый |  |  
	| 
		
	| 
			
			 
			
				14.07.2012, 11:40
			
			
			
		 |  
	| 
		
			|  | сегодня в 12:34|Комментир       |  | 
					Регистрация: 12.04.2011 
						Сообщений: 1,180
					 
		
 |  |  
	| Deff,эм..немного не понял
 
				__________________оляля, ололо
 |  |  
	| 
		
	| 
			
			 
			
				14.07.2012, 11:40
			
			
			
		 |  
	| 
		
			
			| без статуса       |  | 
					Регистрация: 25.05.2012 
						Сообщений: 8,219
					 
		
 |  |  
	|  |  |  
	| 
		
	| 
			
			 
			
				14.07.2012, 12:36
			
			
			
		 |  
	| 
		
			|  | сегодня в 12:34|Комментир       |  | 
					Регистрация: 12.04.2011 
						Сообщений: 1,180
					 
		
 |  |  
	| Deff,
  О_ОВообще-то -2)
 Так-с, я могу сейчас глупость сказать, но знаковый бит, это самый первый?
Все спасибо, приблизительно понял
 
				__________________оляля, ололо
 			 Последний раз редактировалось 9xakep, 14.07.2012 в 12:53.
 |  |  
	| 
		
	| 
			
			 
			
				14.07.2012, 12:48
			
			
			
		 |  
	| 
		
			
			| без статуса       |  | 
					Регистрация: 25.05.2012 
						Сообщений: 8,219
					 
		
 |  |  
	| 
	
 
	| Сообщение от 9xakep |  
	| это самый первый? |  
	
 Да - именно так
 
	
 
	| Сообщение от 9xakep |  
	| Вообще-то -2) |  
	
  (*-1 Эт Ваша строка - скопировал без правки |  |  
	| 
		
	| 
			
			 
			
				14.07.2012, 13:24
			
			
			
		 |  
	| 
		
			|  | 
       |  | 
					Регистрация: 27.12.2008 
						Сообщений: 4,201
					 
		
 |  |  
	| не то чтобы доказательство, но может прояснит немного картину: Переполнение. Целочисленные переменные (в javascript такие "возникают" во время побитовых операций) имеют фиксированный размер. Если прибавить очень большое число, непоместившиеся биты "обрежуться", в частности (правила по аналогии с десятичной системой):
 
	
 
	| Код: |  
	|  0101b
+
10000b
------
 0101b |  
	
Дополнительный код (дополнение до двух) - распространенный формат, в котором хранятся отрицательные числа. Половина значений отводятся под положительные числа, половина - под отрицательные:
 
Соответственно, чтобы получить отрицательное число, надо вычесть модуль из нуля, или, что то же самое, из 10000b (16) (в случае 4-битных чисел, в общем случае из 2^N, где N - количество битов):
	
 
	| Код: |  
	| 1000b (-8) .. 1111b (-1), 0000b, 0001b (1) .. 0111b (7) |  
	
 
 
	
 
	| Код: |  
	| 10000b
-
 0010b
-------
 1110b |  
	
Дополнение до единицы - еще один формат, нераспространенный. Модуль числа получается с помощью операции NOT, например:
 
т.е. получается следующая картина:
	
 
	| Код: |  
	| ~0001b = 1110b
~0010b = 1101b |  
	
 
 
и 1) отрицательные числа как бы смещены на один влево, 2) на образовавшемся месте появился отрицательный ноль
	
 
	| Код: |  
	| 1000b (-7) .. 1110b (-1), 1111b (-0), 0000b, 0001b (1) .. 0111b (7) |  
	
~a = 1111b - a (хз, почему так получается), 1111b = (10000b - 1) ("разница" между форматами равна единице)
 
	
 
	| Код: |  
	| 1111b
-
0001b
-----
1110b |  
	
			
			
	
			
			
			
			
			
				  |  |  
	| 
		
	| 
			
			 
			
				14.07.2012, 13:40
			
			
			
		 |  
	| 
		
			
			| без статуса       |  | 
					Регистрация: 25.05.2012 
						Сообщений: 8,219
					 
		
 |  |  
	| Вообще побитовая инверсия равна вычитанию из -1 
alert(~2) // -3
alert(~3) // -4
alert(~4) // -5
 |  |  
	| 
		
	| 
			
			 
			
				14.07.2012, 16:39
			
			
			
		 |  
	| 
		
			|  | сегодня в 12:34|Комментир       |  | 
					Регистрация: 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.
 |  |  
	| 
		
	| 
			
			 
			
				14.07.2012, 16:45
			
			
			
		 |  
	| 
		
			|  | сегодня в 12:34|Комментир       |  | 
					Регистрация: 12.04.2011 
						Сообщений: 1,180
					 
		
 |  |  
	| x-yuri,Спасибо, но я мало что понял). Что значит b, в конце каждого числа?
 
				__________________оляля, ололо
 |  |  |  |