当前位置: 首页 > 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.zqtcl.cn/news/767482/

相关文章:

  • 网站定制 北京贵阳网站建设公司哪家好
  • 如何做logo模板下载网站企业策划
  • 合肥做网站的公司讯登欧亚达网站是哪家公司做的
  • 网站模板带有sql后台下载企业网站建设平台的功能
  • 网站推广的实际案例电子商务网站建设的要求
  • 永平建设有限公司网站2023一般纳税人企业所得税怎么算
  • 创业网站推广怎么做简单的网站首页
  • 外贸网站模板 外贸网站制作如何推广宣传一个品牌
  • 中企动力企业邮箱 手机邮箱河南网站建设优化推广
  • 广州seo网站多少钱王野天津音乐广播电台图片
  • 东莞网站制作十强怎么做一个链接网站
  • 深圳网站设计 建设首选wordpress 获取父页面
  • 大兴企业网站建设公司wordpress谷歌字体优化
  • 哈尔滨建设银行网站网站建设运营服务商
  • 重庆本地建站企业网站建设流程及费用
  • 网站建设需要用到那些语言简述网站建设和推广评价指标
  • 17网站一起做 佛山印刷做网站网上接单
  • 网站建设步骤 优帮云网站建设首选定制开发
  • 专门做家居的网站国内企业网站设计
  • 做网站时怎么取消鼠标悬停性价比最高网站建设
  • 三网合一网站模板网站上内容列表怎么做
  • 鲜花商城网站建设西安房产网站大全
  • 家庭宽带做网站空间一个数据库可以做几个网站
  • 环境设计公司排名搜索引擎seo是什么意思
  • 北京网站建设策划排名长春市建设集团股份有限公司
  • 网站建设项目怎么跟进客户安阳哪里有做网站的
  • 重庆定制网站建设公司郑州网站模板
  • 网站 建设 领导小组wordpress下拉 友情链接
  • 做网站用php广州最新新闻
  • 福州市住房和城乡建设局网站18款禁用观看黄入口