数据的表示(一)——0与1
*《程序员的数学思维修炼》一书用一些小故事、小例子来引出一些我们初学编程时常遇到的困惑
①0与1故事的启发:(0和1都没有9大,但它俩站一块就比9大)
0并不表示什么都没有
数的大小与所处位置有关系
②程序中的0:
在电子技术中:0一般表示低电平,1为高电平
在逻辑计算中:0一般表示逻辑假(False),1为逻辑真(True)
在数值运算中,0与平常数学中0的含义相同
1.思考:未赋值的变量为0吗?
在不同的程序设计语言中,对于未赋值变量的处理不一样:
对于Basi c类的程序语言(QB,VB等),其初始值为0。——对程序猿来说,这种初始化设置的方式很讨人喜欢,变量声明后就可以使用
但在.Net Framework中,其值为空
而对于C语言系列(C,C#,C++等),未初始化的变量编译器并不会将其初始化为0,而且不同编译系统可能采用不同的处理方式
2.数值0的类型转换<此处初次提及了OOP和一般编程的一些不同之处——关于Boolean类型的定义,这让我想到在我刚开始接触OOP时的困惑,OOP和一般编程有何区别,也是我初学java时许多人问我这和C的思维方式有何不同我一直难以解释的问题,于是我在这里再次详细查询了一些文档资料,并将其整合在分类《我想》_随笔《初学者的困惑:OOP与一般编程的区别》中>
数值0转化为字符串0很好理解,其显示的都是相同的0,只有在进行数值运算时才会体现出不同
在ANSI C中没有专门设置布尔类型,在进行逻辑运算时,将0值作为布尔值False,将非0值作为布尔值True
在C#中,定义了Boolean类型,数值0转换为Boolean类型时得到的结果为False,非0张值转换为Boolean类型时得到的结果为True(面向对象语言一般定义了Boolean类型)
3.除以0异常<此处再次提到OOP和一般编程的一些不同——异常的捕获处理>
在C中如果直接将0作为除数运行编译,将产生一个严重的错误,导致程序不能继续运行,这不是我们所希望的,一个好的程序员应该考虑并处理程序中可能发生的各种异常,然后给客户一个友好的提示
不过在ANSI C中并没有提供异常捕获机制,因此需要手动执行过程,主动去判断,以避免这种严重异常
而在异常捕获方面C++、C#就要方便得多,它们定义了很多异常(也包括DivideByZeroException异常),在我们的程序中可以用try……catch来捕获这些异常