zoukankan      html  css  js  c++  java
  • C#学习笔记之.C基础中比较容易被忽略的细节(一)

    前言:刚开始学习C#的我学习的并不特别仔细,因为学校教的是Java,基本上所有基础都是一掠而过,最惨的是Java还学的不认真。当年老师跟我们说注重实用主义,,我们不是学究,不需要寻根问底,大多数知识会用就行了,这样才能快速提高自己编写代码的能力。

              后来我在编程的时候遇到不少有趣的现象,就重新学习了一边C#基础。视频的老师讲的很好很仔细,我学到很多之前没学过的东西。下面我将分享一下我遇到容易被忽略的细节,你是否也遇到过?

    例题1,byte b=1;

         b+=3;

         b=b+3;

    上面b+=3和b=b+3我们学过是同一个意思。但是如果把这段代码放到VS上,我们会发现b+=3没有问题,b=b+3却出现了错误。这时会感到很奇怪,这两不是同一个意思吗?为什么一个可以,另一个不可以?

    我们从VS错误提示可以容易获知b=b+3缺乏一个显示转换(强制转换),我们把它改成b=(byte)(b+3)就没问题了。但这又引出了下一个问题,为什么b+=3不用显示转换?

    错误图解

    这我们就涉及到了第一个容易被忽略的知识点:快捷运算符,不做自动类型转换。

    使用快捷运算符依然会出现数据超出类型的取值范围,数据二进制截断的问题,但是它就是不会给你提示需要转换。

    例题2,int n1=1,n2=2;

         bool re1=n1>n2 && n1++>2;

         Console.WriteLine(n1);

         bool re2=n1<n2 || n2++<1;

         Console.WriteLine(n2);

         这时候问 n1 和 n2 输出多少? 

    执行结果

    这时我们可以看到 n1=1;n2=2. 这时我们会问,这为什么啊?不是n1++,n2++后n1=2,n2=3吗?

    这时我们来到了第二个容易被忽略的知识点:短路逻辑

    &&逻辑与 : 条件1 && 条件2 ,不管哪个条件为假,结果都为假。程序运算都是从左往右的,先运算条件1:n1>n2,为false。一假具假,已经可以判定结果false.所以这里后面的条件二不执行判断。

    || 逻辑或  : 条件1 && 条件2 ,不管哪个条件为真,结果都为真。先运算条件1:n1<n2,为ture。一真具真,已经可以判定结果ture.同样后面的条件二不执行判断。

    所以 n1++,n2++都没有执行 ,自然n1,n2的值不会发生改变。

    例题3,float f1=3.0f;

                 float f2=2.9f;

                bool b1=f1-f2==0.1f;

               Console.writeLine(b1);

        问:输出的布尔型b1是什么?

    揭晓答案:

    执行结果

    答案是false, 这时有疑问了,3.0-2.9=0.1==0.1 这没问题啊 0.1==0.1这不是ture 吗?

    这时我们得找原因,b1=false,那难道f1-f2不等于0.1?这时我们可以新增一个变量:float f3=f1-f2;打个断点检查下:

    检查结果

     这3.0f-2.9f居然真的不是0.1f,这是为什么?

    这时我们来到了第三个容易被忽略的知识点:二进制无法准确表示1/10,就像十进制中无法准确表示1/3一样。所以3.0f-2.9f会出现运算误差。

    这些知识点可能在我们的实际工作中并不常见,但是确实也是一些不得不知道的基础知识。

  • 相关阅读:
    Educational Codeforces Round 85 D. Minimum Euler Cycle(模拟/数学/图)
    Educational Codeforces Round 85 C. Circle of Monsters(贪心)
    NOIP 2017 提高组 DAY1 T1小凯的疑惑(二元一次不定方程)
    Educational Codeforces Round 85 B. Middle Class(排序/贪心/水题)
    Educational Codeforces Round 85 A. Level Statistics(水题)
    IOS中的三大事件
    用Quartz 2D画小黄人
    strong、weak、copy、assign 在命名属性时候怎么用
    用代码生成UINavigationController 与UITabBarController相结合的简单QQ框架(部分)
    Attempting to badge the application icon but haven't received permission from the user to badge the application错误解决办法
  • 原文地址:https://www.cnblogs.com/xwzLoveCshap/p/11417974.html
Copyright © 2011-2022 走看看