当前位置: 首页 > news >正文

网站建设实验步骤张掖公司网站制作

网站建设实验步骤,张掖公司网站制作,一键转换图片wordpress,带空间二字的韩国视频网站今天看《程序设计语言概念》#xff08;Concepts of Programming Language#xff09;#xff0c;第七章“结合性”一节中有这么一段#xff1a;某些计算机中的整数加法不具有结合性。例如#xff0c;假设一个程序要计算“A B C D”#xff0c;其中A、C是很大的正数Concepts of Programming Language第七章“结合性”一节中有这么一段 某些计算机中的整数加法不具有结合性。例如假设一个程序要计算“A B C D”其中A、C是很大的正数B、D是绝对值很大的负数。在这种情况下将B加到A并不会导致溢出但将C加到A就会溢出。B和D与此类似。 这段话很好理解因为只要是程序员整数计算可能会溢出是基本的常识。但这段话只谈到计算的中间结果发生溢出的情况。如果不考虑中间结果而将重点放在最终结果上计算顺序是否依然会对结果产生影响呢也就是说计算机中的加法满足结合律吗即 (a b) c 是否一定等于 (a c) b 呢 首先如果每个中间结果以及最终结果都没有溢出可以肯定必然是满足结合律的否则就是计算机自身有错误。 如果中间结果发生了溢出会怎样我们不妨编写一个简单的程序验证一下。这里我们选择四个整数a和c是两个是很大的正数b和d是两个很小的负数即绝对值很大的负数。 int a 2147483392; //0x7fffff00; int b -2147479553; //0x80000fff; int c 2146500592; //0x7ff0fff0; int d -2147421968; //0x8000f0f0; int sum1 ((a b) c) d; int sum2 (a b) (c d); int sum3 (a c) (b d); System.out.println(((a b) c) d sum1); System.out.println((a b) (c d) sum2); System.out.println((a c) (b d) sum3);   sum1为从左到右依次计算abcd的和sum2先计算ab和cd然后再计算二者的和sum3则先计算ac和bd然后再求和。通过代码可以看出sum1和sum2的中间结果没有发生溢出但sum3在计算ac和bd时都发生了溢出。下面来看看实际运行结果 ((a b) c) d-917537 (a b) (c d)-917537 (a c) (b d)-917537   可以看到无论顺序如何结果都是正确的。所以我们可以得出结论 计算机中的整数加法运算满足结合律 这里还有一个问题在上面的例子中虽然中间结果发生了溢出但最终结果是没溢出的。那如果最终结果也溢出了会怎么样答案是不同计算顺序得到的结果仍然一样只不过结果都是错的都溢出了。这是由计算机本身有限的精度导致的和结合律无关所以这种情况仍然认为是符合结合律的。你可以自己写个程序来验证这一点。 不过要注意这个结论是有限定条件的对现代大多数计算机系统来说该结论都成立因为这些系统通常都采用“二进制补码”的方式来存储整数而二进制补码的加法运算是符合结合律的。不满足结合律的例子也是有的比如BCD码的加法运算。 ------------------------------------------------------------------ 写到这里我想到了一个老题目如何在不引入临时变量的情况下交换2个整数的值一般来说有2种方法可以做到一种是使用加法另一种是使用异或 a a b; b a - b; a a - b;   a a ^ b; b a ^ b; a a ^ b;   有人说第一种方法有问题原因是将a和b相加时可能会溢出。如果你看了这篇文章就会知道这种说法是错误的了——虽然ab可能会溢出但最后仍能得到正确的结果。要说缺点只是它的效率比第二种要低一些。但话说回来它的可读性却要优于第二种。 ------------------------------------------------------------------ 补码简介 下面简单介绍一下补码如果对此不感兴趣或已比较熟悉请略过。二进制补码Twos complement采用“2^N的补”的方式存储的整数编码其中N为整数的位长。相比而言另一种存储方式“反码”采用的是“1的补”即逐位计算各个位的补1的补为00的补为1在二进制中这和取反是一样的因此反码的英文名称为“Ones complement”。 补码可以认为是对反码的改进这不但因为补码中统一了“正零和负零”还因为其计算也要比反码容易。最主要的一点是补码不用考虑进位即溢出位而反码则必须考虑。补码的另一个优点是其符号位同时也是计算位因此计算时无需对正数和负数区别对待这一点和反码一样。与补码和反码不同原码则必须同时考虑数的正负和进位因此很少有系统采用原码的方式来存储整数。 下面分别用补码和反码的方式来计算“10 - 1”以此加深理解。 由于大多数计算机只实现了加法而没有减法因此“10 - 1”实际上是转换为“10 (-1)”来计算的。为了简单这里假设整数只有8位。 补码的计算过程如下-1的补码为“1111 1111” 0000 1010 1111 1111 —————— 1 0000 1001 结果发生了溢出产生了一个进位对补码来说简单忽略即可因此最后的结果为“9”。 注意这里的溢出属于正常溢出。相比之下如果正数正数结果为负数或负数负数结果为正数时则说明发生了不正常的溢出。正常的溢出结果仍然是正确的这正是补码的特性而不正常的溢出得到的是错误的结果。 反码的计算过程为-1的反码为“1111 1110” 0000 1010 1111 1110 ——————  1 0000 1000 同样发生了溢出但此时不能忽略进位否则将得到错误结果“8”因此还需要把进位加到结果上 0000 1000                1 —————— 0000 1001 得到最终结果“9”。 总结 最后再来简单总结一下。在大多数计算机系统中整数的加法运算满足结合律。具体来说如果最终结果没有溢出即使计算过程的中间结果出现了溢出也不会影响最终结果。而如果最终结果本身就是溢出的改变计算顺序仍然会得到一致的结果这时候仍然认为是满足结合律的。 虽然这篇文章对实际编程可能用处不大因为我们通常只需注意最终结果不要溢出即可对中间过程无需在意。但这篇文章为这个结论提供了一定的理论支持以帮助我们加深对计算机整数加法运算的理解。 参考资料 有符号数的表示http://en.wikipedia.org/wiki/Signed_number_representations 反码http://en.wikipedia.org/wiki/Ones%27_complement 补码http://en.wikipedia.org/wiki/Two%27s_complement BCD码http://en.wikipedia.org/wiki/BCD_code 转载于:https://www.cnblogs.com/antineutrino/p/4211284.html
http://www.pierceye.com/news/767482/

相关文章:

  • 河南省住房和建设厅门户网站网站开发图片素材
  • 在线代理浏览器网站设计本笔记本
  • gta5网站正在建设中柳州团购汽车网站建设
  • 建设一个网站要多少费用吗wordpress 缓存首页
  • 绵阳网站排名深圳哪家网页设计好
  • 软件 开发公司宿迁seo优化
  • 网站开发demo版本做网站服务器的配置
  • 网页游戏排行2013伊克昭盟seo
  • 单页站如何做网站seo优化建e网卧室设计效果图
  • 免费做网站的app巩义seo
  • 做金融服务网站赚钱阿里巴巴网站建设论文
  • 四川做网站的公司哪家好免费团购网站模板
  • 网站建设动漫网站模板怎么做的
  • 西安网站制作公司官网wordpress证书关闭
  • 北网站建设优化seo是什么意思
  • 中国seo网站长沙城乡建设网站
  • 没有相应营业执照怎么做网站重庆网站设计公司排名
  • 企业网站手机版商城网站有什么好处
  • 推荐一本学做网站的书温州阀门网站建设
  • 用户要承担暖气费的税吗太原优化排名推广
  • Wordpress外贸网站搭建公司宿迁建设网站
  • 学校网站建设的意义和应用山东淄博网站建设
  • 莱芜网站建设价格低网站vps
  • 长治做网站哪家好赣州注册公司
  • 网站开发从入门到精通做h5的网站哪个好
  • 免费公司网站如何建立设计个人网站好备案吗
  • 建网站和做微信哪个好在线识别图片百度识图
  • php网站开发如何实现删除功能大连大连建设工程信息网站
  • 表格模板免费下载网站wordpress 插件位置
  • wordpress小白能学会吗汕头做网站优化公司