Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 02.01.2013, 23:53
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

function replac(a){
var z = '00000000';
var Len=a.split("").length;
a=z.substring(0,8-Len)+a;
return a;
}
//=============

var R = ("9");

var R1=R.charCodeAt();
var R2=255-R1;
alert(replac(R1.toString(2))+'\n'+replac(R2.toString(2))+'\n\n'+R1.toString(16)+'\n'+R2.toString(16));

Последний раз редактировалось Deff, 02.01.2013 в 23:58.
Ответить с цитированием
  #32 (permalink)  
Старый 03.01.2013, 01:34
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Ваш пример довольно наглядный, но к сожалению в нем не выполняется бинарный оператор, что для меня более важно.
И я не понял для чего это


var R = ("9");
var R1=R.charCodeAt();
var R2=255-R1;
alert(replac(R1.toString(2))+'\n'+replac(R2.toString(2))+'\n\n'+R1.toString(16)+'\n'+R2.toString(16));




Я сделал так

<style>
.a01 td {border-left: 1px solid black; text-align: right;}
.a01 tr {border-top: 1px solid black;}
</style>
<script>


Punycode = function() 
	{ 
	
	Er = false;
	function nul32 (m,n) 
		{ 
		
		var nu =  "";
		for(var i=0; i<n; i++) nu += "0";
		return ((m.indexOf("-") != -1)? "-":"")+(nu.slice(0,((m.indexOf("-") != -1)?n+1:n)-m.length).concat((m.indexOf("-") != -1)?m.substring(1):m));
		
		}
	function litBig(R,s)
		{
			var R1 = R.charCodeAt();
			var R2 = (R1 << 1);
			var R3 = (R1 >> 1);
			var R4 = ~(R1);
			
			var Rs = "<tr style='border-top: 1px solid black;'><td>" + R + "</td><td>" + nul32(R1.toString(10),4)  + "</td><td>" +  nul32(R1.toString(2),32)  + "</td><td>" +  nul32(R1.toString(16),4) +  "</td><td>" + String.fromCharCode(R1.toString(10)) + "</td></tr>";
												Rs += "<tr><td>" + "~" + "</td><td>" + nul32(R4.toString(10),4)  + "</td><td>" +  nul32(R4.toString(2),32)  + "</td><td>" +  nul32(R4.toString(16),4) +  "</td><td>" + String.fromCharCode(R4.toString(10)) + "</td></tr>";
												Rs += "<tr><td>" + "<< 1" + "</td><td>" + nul32(R2.toString(10),4)  + "</td><td>" +  nul32(R2.toString(2),32)  + "</td><td>" +  nul32(R2.toString(16),4) +  "</td><td>" + String.fromCharCode(R2.toString(10)) + "</td></tr>";
												Rs += "<tr><td>" + ">> 1" + "</td><td>" + nul32(R3.toString(10),4)  + "</td><td>" +  nul32(R3.toString(2),32)  + "</td><td>" +  nul32(R3.toString(16),4) +  "</td><td>" + String.fromCharCode(R3.toString(10)) + "</td></tr>";

		return Rs;	
		}
	
	return {

		
			inp: function (d) 
				{ 
					var m = "<table class='a01'>";
					for(var i=0; i<d.length; i++)
						{
						
							m += litBig(d[i]) + "";
						
						
						}
					 m += "</table>";
						
					if(Er) { document.getElementById("PunycodeError").innerHtml = ""; }
					document.getElementById("Punycode").innerHTML = m;			
				},
		
		
		}

	}();
	
</script>	
<div id="PunycodeError"></div>
<input onKeyUp="Punycode.inp(this.value);">
<div id="Punycode"></div>


Единственное, что мне не очень понятно, почему при " ~ " возвращает на 1 больше? Т.е. если R1 возвращает 0057, то R4 -0058
Ответить с цитированием
  #33 (permalink)  
Старый 03.01.2013, 01:40
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

platedz,
" ~ " работает с 32 разрядными числами, а Вам нужно байтовое представление
поэтому тупо
var R2=255-R.charCodeAt();
чтобы преобразовать в двоичный или 16
R2.toString(2);
R2.toString(16);
для дополнения нулями в двоичном представлении - итог в двоичном суём в функцию => replac(a)
Ответить с цитированием
  #34 (permalink)  
Старый 03.01.2013, 01:50
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Так а это что?
var R2=255-R1
А самое главное что за c6, которое оно выдает?
Ответить с цитированием
  #35 (permalink)  
Старый 03.01.2013, 01:59
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от platedz
Так а это что?
Это аналог "~" для байтового представления
255 в двоичном - это все единички - из всех единичек вычитаем установленные
11111111
-
00111001
__________
11000110

Сообщение от platedz
А самое главное что за c6, которое оно выдает?
11000110 двоичное = это шестнадцетиричное С6 = десятичное 198

Последний раз редактировалось Deff, 03.01.2013 в 02:12.
Ответить с цитированием
  #36 (permalink)  
Старый 03.01.2013, 02:21
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Так насколько я понимаю, при ~ идет отрицание при 32 битном представлении.
Т.е.

9 = 00000000000000000000000000001001
~9 = 11111111111111111111111111110110

а в Вашем случае видимо получается

9 = 00000000000000000000000000111001
~9 = 00000000000000000000000011000110

При этом любой символ с ~ в принципе не существует, т.к. отрицательных кодов символов нет.
Ответить с цитированием
  #37 (permalink)  
Старый 03.01.2013, 02:46
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Большое спасибо за ответ, в общем и целом для меня осталось неясно
Почему alert(0050) выводит мне 40 и что это за 0050?
Почему при " ~ " возвращает на 1 больше? Т.е. если R1 возвращает 0057, то R4 -0058
Ответить с цитированием
  #38 (permalink)  
Старый 03.01.2013, 03:07
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Числа начинаюшиеся с нулей - по умолчанию считаются восьмеричными и
alert все трансформирует на выходе в десятичный код
alert(0050)
alert(parseInt(0050,10));
alert(0100);

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

Если входная строка начинается с "0х", то radix = 16
Если входная строка начинается с "0", то radix = 8. Этот пункт зависит от реализации и в некоторых браузерах (Google Chrome) отсутствует.
В любом другом случае radix=10

alert(50)
alert(050);
alert(0x050);
alert(0100);
Ответить с цитированием
  #40 (permalink)  
Старый 03.01.2013, 05:53
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Спасибо, вроде во всем разобрался, с ~ осталось как-то неясно
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как работает CKEditor? ololosh Общие вопросы Javascript 9 20.12.2012 17:50
Долго работает алгоритм KamalovRadik Серверные языки и технологии 0 25.03.2012 23:28
При активации Disqus, не работает Nivo slider, как решить проблему? pinkfloyd Общие вопросы Javascript 0 30.05.2011 15:29
InnerHTML почему-то работает не так, как хотелось бы. помогите Dima00782 Общие вопросы Javascript 2 13.06.2010 21:17
Как работает обработчик onMouseMove() bayah Общие вопросы Javascript 3 29.04.2010 14:36