javascript中 0x80000000匿名 >>1 为什么等于0xc0000000

编程开发相关分类
本类热门阅览
常用装机软件
MD5加密的javascript实现例子
作者:华彩软件站&&来源:华彩软件站&&发布时间: 19:45:04
/* MD5 Message-Digest Algorithm - JavaScript' MODIFICATION HISTORY:' 1.0 16-Feb-2001 - Phil Fresle (sales@frez.co.uk) - Initial Version (VB/ASP code)' 1.0 21-Feb-2001 - Enrico Mosanghini () - JavaScript porting*/function MD5(sMessage) {function RotateLeft(lValue, iShiftBits) { return (lValue&&iShiftBits) | (lValue&&&(32-iShiftBits)); }function AddUnsigned(lX,lY) {var lX4,lY4,lX8,lY8,lRlX8 = (lX & 0x);lY8 = (lY & 0x);lX4 = (lX & 0x);lY4 = (lY & 0x);lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);if (lX4 & lY4) return (lResult ^ 0x ^ lX8 ^ lY8);if (lX4 | lY4) {if (lResult & 0x) return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);else return (lResult ^ 0x ^ lX8 ^ lY8);} else return (lResult ^ lX8 ^ lY8);}function F(x,y,z) { return (x & y) | ((~x) & z); }function G(x,y,z) { return (x & z) | (y & (~z)); }function H(x,y,z) { return (x ^ y ^ z); }function I(x,y,z) { return (y ^ (x | (~z))); }function FF(a,b,c,d,x,s,ac) {a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));return AddUnsigned(RotateLeft(a, s), b);}function GG(a,b,c,d,x,s,ac) {a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));return AddUnsigned(RotateLeft(a, s), b);}function HH(a,b,c,d,x,s,ac) {a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));return AddUnsigned(RotateLeft(a, s), b);}function II(a,b,c,d,x,s,ac) {a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));return AddUnsigned(RotateLeft(a, s), b);}function ConvertToWordArray(sMessage) {var lWordCvar lMessageLength = sMessage.var lNumberOfWords_temp1=lMessageLength + 8;var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;var lNumberOfWords = (lNumberOfWords_temp2+1)*16;var lWordArray=Array(lNumberOfWords-1);var lBytePosition = 0;var lByteCount = 0;while ( lByteCount & lMessageLength ) {lWordCount = (lByteCount-(lByteCount % 4))/4;lBytePosition = (lByteCount % 4)*8;lWordArray[lWordCount] = (lWordArray[lWordCount] | (sMessage.charCodeAt(lByteCount)&&lBytePosition));lByteCount++;}lWordCount = (lByteCount-(lByteCount % 4))/4;lBytePosition = (lByteCount % 4)*8;lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80&&lBytePosition);lWordArray[lNumberOfWords-2] = lMessageLength&&3;lWordArray[lNumberOfWords-1] = lMessageLength&&&29;return lWordA}function WordToHex(lValue) {var WordToHexValue="",WordToHexValue_temp="",lByte,lCfor (lCount = 0;lCount&=3;lCount++) {lByte = (lValue&&&(lCount*8)) & 255;WordToHexValue_temp = "0" + lByte.toString(16);WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);}return WordToHexV}var x=Array();var k,AA,BB,CC,DD,a,b,c,dvar S11=7, S12=12, S13=17, S14=22;var S21=5, S22=9 , S23=14, S24=20;var S31=4, S32=11, S33=16, S34=23;var S41=6, S42=10, S43=15, S44=21;// Steps 1 and 2. Append padding bits and length and convert to wordsx = ConvertToWordArray(sMessage);// Step 3. Initialisea = 0x; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x;// Step 4. Process the message in 16-word blocksfor (k=0;k&x.k+=16) {AA=a; BB=b; CC=c; DD=d;a=FF(a,b,c,d,x[k+0], S11,0xD76AA478);d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756);c=FF(c,d,a,b,x[k+2], S13,0x242070DB);b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);d=FF(d,a,b,c,x[k+5], S12,0x4787C62A);c=FF(c,d,a,b,x[k+6], S13,0xA8304613);b=FF(b,c,d,a,x[k+7], S14,0xFD469501);a=FF(a,b,c,d,x[k+8], S11,0x);d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);a=FF(a,b,c,d,x[k+12],S11,0x6B901122);d=FF(d,a,b,c,x[k+13],S12,0xFD987193);c=FF(c,d,a,b,x[k+14],S13,0xA679438E);b=FF(b,c,d,a,x[k+15],S14,0x49B40821);a=GG(a,b,c,d,x[k+1], S21,0xF61E2562);d=GG(d,a,b,c,x[k+6], S22,0xC040B340);c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);a=GG(a,b,c,d,x[k+5], S21,0xD62F105D);d=GG(d,a,b,c,x[k+10],S22,0x2441453);c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87);b=GG(b,c,d,a,x[k+8], S24,0x455A14ED);a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);c=GG(c,d,a,b,x[k+7], S23,0x676F02D9);b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942);d=HH(d,a,b,c,x[k+8], S32,0x);c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA);c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085);b=HH(b,c,d,a,x[k+6], S34,0x4881D05);a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039);d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665);a=II(a,b,c,d,x[k+0], S41,0xF4292244);d=II(d,a,b,c,x[k+7], S42,0x432AFF97);c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);b=II(b,c,d,a,x[k+5], S44,0xFC93A039);a=II(a,b,c,d,x[k+12],S41,0x655B59C3);d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92);c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);b=II(b,c,d,a,x[k+1], S44,0x85845DD1);a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F);d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);c=II(c,d,a,b,x[k+6], S43,0xA3014314);b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);a=II(a,b,c,d,x[k+4], S41,0xF7537E82);d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);b=II(b,c,d,a,x[k+9], S44,0xEB86D391);a=AddUnsigned(a,AA); b=AddUnsigned(b,BB); c=AddUnsigned(c,CC); d=AddUnsigned(d,DD);}// Step 5. Output the 128 bit digestvar temp= WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);return temp.toLowerCase();}
MD5加密的javascript实现例子由华彩软件站为您最新收集整理,版权归原作者或公司所有。如有侵权,请与我们联系删除。
?上一文章:
?下一文章:看看我的内存配置_百度知道
看看我的内存配置
那个未分页是怎么回事?
在8086时期,寄存器是16位,无法存放20位的物理地址,为了解决这问题,人们提出了分段机制,分段机制就是将内存分段,每段大小64kb,在段寄存器中放入段基址,然后+上段偏移量就成了物理地址或者线性地址,为什么说是或呢?因为在采用分页基址的系统中,线性地址加上页偏移量才是真正的物理地址,如果没有用分页机制,计算出来的就是物理地址。windows NT引入了内存分页机制,此种内存管理机制,使得从应用程序角度来看,其是独占使用4GB的内存空间,应用程序间内存空间隔离而互不影响,一个进程崩溃不会蔓延、影响到其它进程,另外使得虚拟内存机制成为可能,把暂时不用的内存页交换到磁盘pagefile文件中,需要时再交换进来。内存分页机制是把物理内存按固定大小分成很多个等份,一般为4K大小,下面也以4K为一页来说明,每个等份称为一页,我称它为物理页,线性地址空间也进行了分页,我称它为线性页,对于某个进程可访问的线性地址空间0~0x3fffffff,如何映射到物理内存中呢?也就是说线性页如何映射到物理页呢?线性页和物理页好像没人如此叫,我来引入一个。下面来探讨一下。
原来在进程地址空间的0xC0000000起始处的4M空间,到0xC03fffff结束,存放了各个线性页所对应的物理页的物理地址值,每4字节为一项,每1024个项组成一个页表PT,故共1024个PT,页表内的项索引叫PTE(page table entry),如第一个线性页,即0~0x00000fff线性地址空间,其物理页是哪个呢?显然是线性地址0xC0000000指向的DWORD值,依此类推,诙 鱿咝砸常 锢硪澄 咝缘刂?xC0000001的值,线性页映射到物理页后加上页内偏移就可以得到物理地址了,原来挺简单的嘛。显然页内偏移为线性地址的末尾12位嘛,即有如下公式:offset=LA && 0x00000fffLA : 线性地址,line addressoffset:页内偏移PA:物理地址,physic address理解了前面的描述,易知,线性地址的高20位即为PTE索引即有PA=*(0xC0000000+LA&&12*4),*表示取地址内容那0xC0000000开始的4M线性地址,物理页是哪些呢?我们来计算一下0xCxC*4=0xC0300000可见0xC0300000开始的页表比较特殊,称为页目录表,该表的每一项正好指向一个页表的开始位置,也就是页表的表,页目录表的索引,称为PDE(page directory entry),假设知道了一个线性地址的PDE,PTE,可按以下公式计算物理地址:PA = *(0xC0000000+PDE*1024*4+PTE*4)
= *(0xC0000000+(PDE&&10+PTE)&&2)对比前面的公式,*(0xC0000000+LA&&12*4) == *(0xC0000000+(PDE&&10+PTE)&&2)
LA&&12 == (PDE&&10+PTE)PDE,PTE最大次方,所以PDE即为线性地址的高10位,PTE为线性地址的中间10位,线性地址的低12为页内偏移。有些文章中提到的PDE地址,PTE地址,如何理解?PDE地址指线性地址在页目录表对应项的地址,
PDE_add=LA&&22+0xC0300000PTE地址指线性地址在页表对应项的地址,
PTE_add=LA&&12+0xC0000000PTE地址低12位包含了页属性,用windbg可看到lkd& dt _hardware_PtEnt!_HARDWARE_PTE
+0x000 Valid
: Pos 0, 1 Bit
+0x000 Write
: Pos 1, 1 Bit
+0x000 Owner
: Pos 2, 1 Bit
+0x000 WriteThrough
: Pos 3, 1 Bit
+0x000 CacheDisable
: Pos 4, 1 Bit
+0x000 Accessed
: Pos 5, 1 Bit
+0x000 Dirty
: Pos 6, 1 Bit
+0x000 LargePage
: Pos 7, 1 Bit
+0x000 Global
: Pos 8, 1 Bit
+0x000 CopyOnWrite
: Pos 9, 1 Bit
+0x000 Prototype
: Pos 10, 1 Bit
+0x000 reserved
: Pos 11, 1 Bit
+0x000 PageFrameNumber : Pos 12, 20 Bits
当0位为1时,说明PTE有效,页在物理内存中,而7位的LargePage表示当前虚拟地址大于等于0x并且小于0xa0000000(减去0x就得到了物理地址)
CPU是如何计算一个线性地址的物理地址的呢?以下参考了一些网上资料。
1 CR3寄存器保存了当前活动进程的页目录所在物理页地址,CPU通过CR3找到当前页目录所在的物理页地址a
2 计算PDE的物理地址:a+ 线性地址高10位左移两位 (因为每个页目录项四个字节),取出该地址处的PDE,PDE的前20位+低12位0是这个虚拟地址对应页表的物理地址b
3 计算PTE的物理地址:b+ 虚拟地址的中间10位左移两位,取出该地址处的PTE,PTE的前20位是这个虚拟地址+低12位0是所对应物理页的地址c
4 计算该虚拟地址对应的物理地址:c + 虚拟地址最低12位
其他类似问题
内存的相关知识
按默认排序
其他1条回答
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁1306人阅读
一,题目:输入一个整数,求该整数的二进制表达中有多少个1。
& & & & & & & & & 例如输入10,由于其二进制表示为1010,有两个1,因此输出2。
二,分析:
& & & & 这是一道很基本的考查位运算的面试题。
& & & & 菜鸟思考:利用除法,和取余运算计算出10进制数的二进制表示后,统计1的个数
自己测试代码(感觉没问题)
#include &iostream&
count_of_one(int n)
int count=0;
if(n%2==1)
int main()
cout&&count_of_one(16)&&
}查询各方资料,多次杀死脑细胞后,发现:如果为负数的话将导致错误发生
#include &iostream&
count_of_one(int a)
int count=0;
if(n%2==1)
return count+1;
int main()
cout&&count_of_one(-10)&&
四,升级版(除法的效率比移位运算要低的多,)
& & & &先判断整数的最右边一位是不是1。接着把整数右移一位,原来处于右边第二位的数字现在被移到第一位了,再判断是不是1。
这样每次移动一位,直到这个整数变成0为止。现在的问题变成怎样判断一个整数的最右边一位是不是1了。很简单,如果它和整数1作与运算。由于1除了最右边一位以外,其他所有位都为0。因此如果与运算的结果为1,表示整数的最右边一位是1,否则是0。
得到的代码如下:
int NumberOf1_Solution1(int i)
int count = 0;
i = i && 1;
//是相对于二进制数,向右移动一位,等价于除以2
在实际编程中如果可以应尽可能地用移位运算符代替乘除法。&
这个思路当输入i是正数时没有问题,但当输入的i是一个负数时,不但不能得到正确的1的个数,还将导致死循环。以负数0x为例,右移一位的时候,并不是简单地把最高位的1移到第二位变成0x,而是0xC0000000。这是因为移位前是个负数,仍然要保证移位后是个负数,因此移位后的最高位会设为1。如果一直做右移运算,最终这个数字就会变成0xFFFFFFFF而陷入死循环。为了避免死循环,我们可以不右移输入的数字i。首先i和1做与运算,判断i的最低位是不是为1。接着把1左移一位得到2,再和i做与运算,就能判断i的次高位是不是1……这样反复左移,每次都能判断i的其中一位是不是1。基于此,我们得到如下代码:
int NumberOf1_Solution2(int i)
int count = 0;
unsigned int flag = 1;
while(flag)
if(i &flag)
flag = flag && 1;
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:574424次
积分:10694
积分:10694
排名:第419名
原创:390篇
转载:31篇
评论:513条
文章:20篇
阅读:35304
(4)(1)(2)(4)(1)(1)(3)(5)(6)(3)(27)(7)(13)(37)(28)(37)(63)(53)(23)(14)(6)(44)(40)5393人阅读
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :xrbeck
(Mapping File)Windows
&&&&&&&&&&&&&&&&&&&&&&&&&
&&& WIN3216WindowsWIN32
,这个地址的寻址空间达到了4GB2^32
),64M128MAB
&& Windows(Win9X,
Win2KWinNT9X)
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&& 0x----0x003FFFFF&&&& 4M&&&&&
&&&&&&&&&&& 0x---0x7FFFFFFF&&& 2G-4M&&
&&&&&&&&&& &0xxBFFFFFFF&&&& 1G&&&&&& Win32,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&
&&&&&&&&&&& 0xC0000000---0xFFFFFFFF&&& 1G&&&&&& Vxd
&&& WindowsPCRAM?
&&&&&&&&&& A&&&&&&&&&&&&&&&&&& RAM&&&&&&&&&&&&&&&&&&& B
1&&&&&&&&&&
,OS(,,Windows4K,GetSystemInfoAPISYSTEM_INFOdwPageSize)
,RAM,16Windows
,Win32来继续
.Richter:”
”RAM”.(Windows
(rerserve)(4M—2G),(commit)
.WindowsVirtualAlloc
VirtualFreeAPI,
.Item[300][256];
Windows:VirtualAlloc,
LPVOID& pStart = NULL;&&&&&&
LPVOID& pItem = NULL;
DWORD& Offset=0;
pStart =VirtualAlloc(NULL,300*256*200, MEM_RESERVE,PAGE_READWRITE);
pItem =VirtualAlloc(pStart+Offset,200,MEM_RESERVE,PAGE_READWRITE);
pItem=….&&
VirtualFree(pStart, 300*256*200, PAGE_READWRITE);&
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:44866次
排名:千里之外
原创:18篇
评论:31条
(1)(1)(3)(1)(1)(2)(2)(2)(3)(2)微信公众号
转帖一个忘了出处的精华[MD5加密的javascript实现例子]
Loading...
/* MD5 Message-Digest Algorithm - JavaScript' MODIFICATION HISTORY:' 1.0&&&&16-Feb-2001 - Phil Fresle (sales@frez.co.uk) - Initial Version (VB/ASP code)' 1.0&&&&21-Feb-2001 - Enrico Mosanghini () - JavaScript porting*/function MD5(sMessage) { function RotateLeft(lValue, iShiftBits) { return (lValue&&iShiftBits) | (lValue&&&(32-iShiftBits)); } function AddUnsigned(lX,lY) {&&&&var lX4,lY4,lX8,lY8,lR&&&&lX8 = (lX & 0x);&&&&lY8 = (lY & 0x);&&&&lX4 = (lX & 0x);&&&&lY4 = (lY & 0x);&&&&lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);&&&&if (lX4 & lY4) return (lResult ^ 0x ^ lX8 ^ lY8);&&&&if (lX4 | lY4) {&&&&&&&&if (lResult & 0x) return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);&&&&&&&&else return (lResult ^ 0x ^ lX8 ^ lY8);&&&&} else return (lResult ^ lX8 ^ lY8); } function F(x,y,z) { return (x & y) | ((~x) & z); } function G(x,y,z) { return (x & z) | (y & (~z)); } function H(x,y,z) { return (x ^ y ^ z); } function I(x,y,z) { return (y ^ (x | (~z))); } function FF(a,b,c,d,x,s,ac) {&&&&a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));&&&&return AddUnsigned(RotateLeft(a, s), b); } function GG(a,b,c,d,x,s,ac) {&&&&a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));&&&&return AddUnsigned(RotateLeft(a, s), b); } function HH(a,b,c,d,x,s,ac) {&&&&a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
相关推荐:1、2、3、4、5、6、7、8、9、10、
相关微信头条:1、2、3、4、5、6、7、8、9、10、
猜你喜欢:1、2、3、4、5、6、7、8、9、10、
推荐电影:1、2、3、4、5、6、7、8、9、10、
热门关键词:
随机关键词:
正在加载...
热评文章评分 4.2, 满分 5 星10 票评分 4.1, 满分 5 星10 票评分 3.9, 满分 5 星10 票评分 3.8, 满分 5 星10 票评分 4.2, 满分 5 星9 票
最新微信头条}

我要回帖

更多关于 80000000匿名 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信