JS基础回顾-数值-IEEE754

JS基础回顾-数值-IEEE754,第1张

数组的索引按照32位且无符号定点整数存储,也就是说数组索引最大值为 2 32 ,而数组以0开始,所以实际最大值为2 32 - 1

对于 & | ^ ~ 以后单独再说,主要说明 <<, >>, >>>

ECMA相关位运算说明

完整的位运算步骤

js能精确计算(运算结果)的数值范围是 [-2 53 , +2 53 ]
js能表示的纯整数数值范围是 [-18x10 308 , +18x10 308 ]
js能表示的纯小数数值范围是 [ -5x10 -324 , -1) ∪ (+1, 5x10 -324 ]

IEE754标准就和js中的正则表达式,unicode编码一样,他不是js特有的东西的,而是一种国际上通用规范,
目的其一,方便;
目的二,使程序可移植性强。
(在js中定义的数值,解释器会帮我们把值转化为IEEE754标准的64位浮点型,如果是位运算,解释器会把值定义为32位整型)

了解他之前,先看一个示例

那么,我们能不能创造出一种,利用有限的8位机器数,尽可能多的解决上述问题的方法呢?

假设,机器位为8,有如下的一段2进制编码:

符号位 :0表示正值, 1表示负值;
指数位 :就是我们理解的平方数,在这里由于是2进制,所以,指数位的010暂且表示为 2 010 = 2 2 ,且指数的表示范围为0 ~ 7之间。(一会说这样做的问题)
数值位 :就是我们要表示的真实的值的部分,但是,这里的1010并不是我们通常理解的10进制 的10,因为我们要在这解决上述定点数的问题,

那么,我们怎么设计才能让一条整数,小数共存的数据表示在一个硬件中呢?且简单易懂?

但是,以(0)作为约定的数值位默认头是有问题的,比如:
真值 +0001010 以我们自定义规则转换成的二进制为,
0000 0010 ,因为机器位数为8,超过的8位要舍去,10就被丢掉了,损失了精度且保留了多余的,没有意义的0 。
这就引出了我们要解决的问题4

看来,我们现在需要对规则进行一些修改,我们尝试以(1)作为约定的数值位默认头,还是以真值 +0001010为例 ,那么这个真值可以改写为
1010 x 2 -3 == 1010 x 2 -011

这回可 *** 蛋了,因为之前我们约定的指数部分的表示范围是0 ~ 7,这个-3可怎么办呢,聪明的你肯定想到了,何不把指数位置的第一位也规定为符号位呢?这不就可以表示正负数了吗,没错,是可以满足需求,但是,多一个符号位的判断会增加机器的运算复杂度负担,那么可以用补码啊?没错,但是,如果通过指数进行数值比较的时候(注意:在对两个值进行判断的时候,例如 3 > 4,计算机浮点运算器会对 3 和 4 对应的64位浮点数指数位数值进行比较,如果不相等,直接返回true或false,如果想等,再进行数值位的比较),又要增加负担,有没有更好的办法呢?

可推理出
真值 +0001010 == 1010 x 2 -3 == 1010 x 2 -011
得指数真实表示的值为 -011 + 偏移值 011 == 000
真值 +0001010 的自定义2进制编码值为
0000 0100

经过以上的求证,得到新的8位机器数浮点数约定如下:

所以,图1-1使用我们新约定的浮点数规则解码,得到:
11010 x 2 010-011=-1 == 011010
+011010 == 09140625

先说间隙值

再说数值范围

我们再回过头来看看IEEE754,由于js使用的是IEEE754双精度浮点格式(64 位),所以我们就针对64位说明。其实,和我们上面自己胡编乱造的规则基本一样,

IEEE754双精度浮点格式
符号位1,指数位11,数值位52,偏移值 2 11-1 - 1 == 1023

现在,我们可以自己证明

因为数值位是52位,加上约定的隐藏头1 那么就是 53位,超出的部分舍弃,所以就是精度损失
但严谨来说,应该是不包含小数

已经证明过

我们先把01 和 02 转化为2进制

很明显,01 和 02 都无法用2进制精准表示,呈现出的是无限循环。

我们看一个实例,来看看IEEE如何做舍入处理的
(例子是IEEE754单精度浮点格式(32 位),没找到64位的,自己懒得算了。。不过可以说明问题)

01被IEEE754双精度浮点数舍入处理后的值为
000011001100110011001100110011001100110011001100110011010

02被IEEE754双精度浮点数舍入处理后的值为
00011001100110011001100110011001100110011001100110011010

01 和 02 在转换后都被进位了,所以实际值,比真实值要大一点点,所以01+02比03略大,暂且这么来理解,因为浮点数的运算比定点数要麻烦,又由于101假期结束,至此一阶段笔记到此结束,之后的二阶段再补浮点数运算的笔记

参考资料
计算机组成原理
>本文为大家详细介绍下js中widow open()方法的各项参数及使用示例 有想学习的朋友可不要错过了 希望对大家有所帮助  

一 window open()支持环境 JavaScript +/JScript +/Nav +/IE +/Opera + 二 基本语法 window open(pageURL name parameters) 其中 pageURL 为子窗口路径 name 为子窗口句柄 parameters 为窗口参数(各参数用逗号分隔) 三 示例

复制代码 代码如下: <SCRIPT> <! window open ( page newwindow height= width= top= left= toolbar=no menubar=no scrollbars=no resizable=no location=no status=no ) //写成一行 > </SCRIPT>

脚本运行后 page 将在新窗体newwindow中打开 宽为 高为 距屏顶 象素 屏左 象素 无工具条 无菜单条 无滚动条 不可调整大小 无地址栏 无状态栏 请对照 上例中涉及的为常用的几个参数 除此以外还有很多其他参数 请见四 四 各项参数 其中yes/no也可使用 / pixel value为具体的数值 单位象素 参数 | 取值范围 | 说明 alwaysLowered | yes/no | 指定窗口隐藏在所有窗口之后 alwaysRaised | yes/no | 指定窗口悬浮在所有窗口之上 depended | yes/no | 是否和父窗口同时关闭 directories | yes/no | Nav 和 的目录栏是否可见 height | pixel value | 窗口高度 hotkeys | yes/no | 在没菜单栏的窗口中设安全退出热键 innerHeight | pixel value | 窗口中文档的像素高度 innerWidth | pixel value | 窗口中文档的像素宽度 location | yes/no | 位置栏是否可见 menubar | yes/no | 菜单栏是否可见 outerHeight | pixel value | 设定窗口(包括装饰边框)的像素高度 outerWidth | pixel value | 设定窗口(包括装饰边框)的像素宽度 resizable | yes/no | 窗口大小是否可调整 screenX | pixel value | 窗口距屏幕左边界的像素长度 screenY | pixel value | 窗口距屏幕上边界的像素长度 scrollbars | yes/no | 窗口是否可有滚动栏 titlebar | yes/no | 窗口题目栏是否可见 toolbar | yes/no | 窗口工具栏是否可见 Width | pixel value | 窗口的像素宽度 z look | yes/no | 窗口被激活后是否浮在其它窗口之上 ===================================================== 最基本的d出窗口代码 其实代码非常简单

复制代码 代码如下: <SCRIPT LANGUAGE="javascript"> <! window open ( page ) > </SCRIPT>

因 为著是一段javascripts代码 所以它们应该放在<SCRIPT LANGUAGE="javascript">标签和</script>之间 <! 和 >是对一些版本低的浏览器起作用 在这些老浏览器中不会将标签中的代码作为文本显示出来 要养成这个好习惯啊 Window open ( page ) 用于控制d出新的窗口page 如果page 不与主窗口在同一路径下 前面应写明路径 绝对路径(//)和相对路径( /)均可 用单引号和双引号都可以 只是不要混用 这一段代码可以加入HTML的任意位置 <head>和</head>之间可以 <body>间</body>也可以 越前越早执行 尤其是页面代码长 又想使页面早点d出就尽量往前放 经过设置后的d出窗口 下面再说一说d出窗口的设置 只要再往上面的代码中加一点东西就可以了 我们来定制这个d出的窗口的外观 尺寸大小 d出的位置以适应该页面的具体情况

复制代码 代码如下: <SCRIPT LANGUAGE="javascript"> <! window open ( page newwindow height= width= top= left= toolbar=no menubar=no scrollbars=no resizable=no location=no status=no ) //写成一行 > </SCRIPT>

参数解释 <SCRIPT LANGUAGE="javascript"> js脚本开始 window open d出新窗口的命令 page d出窗口的文件名 newwindow d出窗口的名字(不是文件名) 非必须 可用空 代替 height= 窗口高度 width= 窗口宽度 top= 窗口距离屏幕上方的象素值 left= 窗口距离屏幕左侧的象素值 toolbar=no 是否显示工具栏 yes为显示 menubar scrollbars 表示菜单栏和滚动栏 Resizable=no 是否允许改变窗口大小 yes为允许 location=no 是否显示地址栏 yes为允许 status=no 是否显示状态栏内的信息(通常是文件已经打开) yes为允许 </SCRIPT> js脚本结束 用函数控制d出窗口 下面是一个完整的代码

复制代码 代码如下: <> <head> <script LANGUAGE="JavaScript"> <! function openwin() { window open ("page " "newwindow" "height= width= toolbar=no menubar=no scrollbars=no resizable=no location=no status=no") //写成一行 } // > </script> </head> <body onload="openwin()"> …任意的页面内容… </body> </>

这里定义了一个函数openwin() 函数内容就是打开一个窗口 在调用它之前没有任何用途 怎么调用呢? 方法一 <body onload="openwin()"> 浏览器读页面时d出窗口 方法二 <body onunload="openwin()"> 浏览器离开页面时d出窗口 方法三 用一个连接调用 <a href="#" _fcksavedurl=""#"" _fcksavedurl=""#"" _fcksavedurl=""#"" onclick="openwin()">打开一个窗口</a> 注意 使用的"#"是虚连接 方法四 用一个按钮调用 <input type=button onclick="openwin()" value="打开窗口"> 同时d出 个窗口 对源代码稍微改动一下

复制代码 代码如下: <script LANGUAGE="JavaScript"> <! function openwin() { window open ("page " "newwindow" "height= width= top= left= toolbar=no menubar=no scrollbars=no resizable=no location=no status=no") //写成一行 window open ("page " "newwindow " "height= width= top= left= toolbar=no menubar=no scrollbars=no resizable=no location=no status=no") //写成一行 } // > </script>

为避免d出的 个窗口覆盖 用top和left控制一下d出的位置不要相互覆盖即可 最后用上面说过的四种方法调用即可 注意 个窗口的name(newwindows和newwindow )不要相同 或者干脆全部为空 OK? 主窗口打开文件 同时d出小窗口page 如下代码加入主窗口<head>区

复制代码 代码如下: <script language="javascript"> <! function openwin() {window open("page " "" "width= height= ") } // > </script>

加入<body>区 <a href=" " onclick="openwin()">open</a>即可 d出的窗口之定时关闭控制 下面我们再对d出的窗口进行一些控制 效果就更好了 如果我们再将一小段代码加入d出的页面(注意是加入到page 的HTML中 可不是主页面中 否则…) 让它 秒后自动关闭是不是更酷了? 首先 将如下代码加入page 文件的<head>区

复制代码 代码如下: <script language="JavaScript"> function closeit() {setTimeout("self close()" ) //毫秒} </script>

然后 再用<body onload="closeit()"> 这一句话代替page 中原有的<BODY>这一句就可以了 (这一句话千万不要忘记写啊!这一句的作用是调用关闭窗口的代码 秒钟后就自行关闭该窗口 ) 在d出窗口中加上一个关闭按钮 <FORM> <INPUT TYPE= BUTTON VALUE= 关闭 onClick= window close() > </FORM> 呵呵 现在更加完美了! 内包含的d出窗口 一个页面两个窗口 上面的例子都包含两个窗口 一个是主窗口 另一个是d出的小窗口 通过下面的例子 你可以在一个页面内完成上面的效果

复制代码 代码如下: <> <head> <SCRIPT LANGUAGE="JavaScript"> function openwin() {OpenWindow=window open("" "newwin" "height= width= toolbar=no scrollbars="+scroll+" menubar=no"); //写成一行 OpenWindow document write("<TITLE>例子</TITLE>") OpenWindow document write("<BODY BGCOLOR=#ffffff>") OpenWindow document write("<h >Hello!</h >") OpenWindow document write("New window opened!") OpenWindow document write("</BODY>") OpenWindow document write("</HTML>") OpenWindow document close()} </SCRIPT> </head> <body> <a href="#" onclick="openwin()">打开一个窗口</a> <input type=button onclick="openwin()" value="打开窗口"> </body> </>

看看 OpenWindow document write()里面的代码不就是标准的HTML吗?只要按照格式写更多的行即可 千万注意多一个标签或少一个标签就会出现错误 记得用OpenWindow document close()结束啊 终极应用 d出的窗口之Cookie控制 回 想一下 上面的d出窗口虽然酷 但是有一点小毛病(沉浸在喜悦之中 一定没有发现吧?)比如你将上面的脚本放在一个需要频繁经过的页面里(例如首页) 那 么每次刷新这个页面 窗口都会d出一次 是不是非常烦人?: (有解决的办法吗?Yes! ; ) Follow me 我们使用cookie来控制一下就可以了 首先 将如下代码加入主页面HTML的<HEAD>区

复制代码 代码如下: <script> function openwin() {window open("page " "" "width= height= ")} function get_cookie(Name) {var search = Name + "=" var returnvalue = ""; if (document cookie length > ) { offset = document cookie indexOf(search) if (offset != ) { offset += search length end = document cookie indexOf(";" offset); if (end == ) end = document cookie length; returnvalue=unescape(document cookie substring(offset end)) } } return returnvalue; } function loadpopup(){ if (get_cookie( popped )== ){ openwin() document cookie="popped=yes" } } </script> lishixinzhi/Article/program/Java/JSP/201311/20056

最基本的表达式创建法。
// Description: 演示正则表达式的创建
// CopyRight: >

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13335230.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-16
下一篇 2023-07-16

发表评论

登录后才能评论

评论列表(0条)

保存