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)); |
Ваш пример довольно наглядный, но к сожалению в нем не выполняется бинарный оператор, что для меня более важно.
И я не понял для чего это 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 |
platedz,
" ~ " работает с 32 разрядными числами, а Вам нужно байтовое представление поэтому тупо var R2=255-R.charCodeAt(); чтобы преобразовать в двоичный или 16 R2.toString(2); R2.toString(16); для дополнения нулями в двоичном представлении - итог в двоичном суём в функцию => replac(a) |
Так а это что?
var R2=255-R1 А самое главное что за c6, которое оно выдает? |
Цитата:
255 в двоичном - это все единички - из всех единичек вычитаем установленные 11111111 - 00111001 __________ 11000110 Цитата:
|
Так насколько я понимаю, при ~ идет отрицание при 32 битном представлении.
Т.е. 9 = 00000000000000000000000000001001 ~9 = 11111111111111111111111111110110 а в Вашем случае видимо получается 9 = 00000000000000000000000000111001 ~9 = 00000000000000000000000011000110 При этом любой символ с ~ в принципе не существует, т.к. отрицательных кодов символов нет. |
Большое спасибо за ответ, в общем и целом для меня осталось неясно
Почему alert(0050) выводит мне 40 и что это за 0050? Почему при " ~ " возвращает на 1 больше? Т.е. если R1 возвращает 0057, то R4 -0058 |
Числа начинаюшиеся с нулей - по умолчанию считаются восьмеричными и
alert все трансформирует на выходе в десятичный код alert(0050) alert(parseInt(0050,10)); alert(0100); |
Если входная строка начинается с "0х", то radix = 16
Если входная строка начинается с "0", то radix = 8. Этот пункт зависит от реализации и в некоторых браузерах (Google Chrome) отсутствует. В любом другом случае radix=10 alert(50) alert(050); alert(0x050); alert(0100); |
Спасибо, вроде во всем разобрался, с ~ осталось как-то неясно
|
Часовой пояс GMT +3, время: 04:31. |