Boolean和bool VS. 鸡蛋和鸡

简介:

    C/C++中没有提供bool类型,我们可以用0和非0取而代之;而在.Net中则提供了一个Boolean类型,其实是对0/1的一个封装。下面我们来看下这段代码:
Boolean b =   true ;
Console.WriteLine(
sizeof (Boolean)); // 得到的结果是1byte
unsafe // 先要用/unsafe(项目属性->Build->Allow unsafe code)来关闭安全检查
{
    
int i = (int)&b;//取地址
    Console.WriteLine(*(byte*)i);//上面得到bool类型占1byte,这里将Boolean中的值按byte来读取
}

    得出的结果是1,当Boolean变量b赋值为false时,得到的结果是0。虽然只用1个bit就可以表示0/1了,但计算机存储的最小单位是byte,没办法只好浪费另外7个bit了:)

 


    现在转入正题来扯淡,出于对Boolean的好奇,我用Reflector反汇编了下mscorlib.dll,得到Boolean的源代码(完整的代码见附录),居然看到了下面的内容:

     public   struct  Boolean : IComparable, IConvertible, IComparable < bool > , IEquatable < bool >
    
{
        
private bool m_value;
        
//省略其他成员的定义.....
    }

    MSDN中解释bool与Boolean的关系是:“bool 关键字是 System.Boolean 的别名”。观察上面的Boolean类型定义,在其继承的泛型接口和成员变量中,我们找到了“bool”的影子(我想可能时Reflector将IL代码反汇编时将类型Boolean翻译成C#中的关键字bool),也就是说Boolean的定义依赖与bool(Boolean)。这就好比鸡蛋与鸡,到底是先有鸡蛋还是先有鸡?到底是先有Boolean的类型定义还是先有Boolean类型呢? 


附录 - Boolean类源码:

ContractedBlock.gif

本文转自Silent Void博客园博客,原文链接:http://www.cnblogs.com/happyhippy/archive/2007/04/12/710928.html ,如需转载请自行联系原作者
相关文章
|
18天前
震惊!!!return 语句居然是这样的
震惊!!!return 语句居然是这样的
18 1
|
3月前
|
算法 安全 程序员
C++ “万能血“ void*指针
C++ “万能血“ void*指针
|
5月前
|
算法
class080 状压dp-上【算法】
class080 状压dp-上【算法】
25 0
|
5月前
|
算法
class081 状压dp-下【算法】
class081 状压dp-下【算法】
25 2
|
5月前
|
C++
[C++/PTA] 2017final友元函数之全班同学的平均绩点
[C++/PTA] 2017final友元函数之全班同学的平均绩点
84 0
|
5月前
|
存储 C++
[C++/PTA] 2017Final 圆周率山
[C++/PTA] 2017Final 圆周率山
31 0
|
1月前
|
C++
[C++/PTA] 友元很简单2016final
[C++/PTA] 友元很简单2016final
30 0
HDU4417 Super Mario(主席树)
HDU4417 Super Mario(主席树)
60 0
5位运动员参加10米跳水比赛,他们预测结果均只有一半正确//A说:B第二,我第三//B说:我第二,E第四//C说:我第一,D第二//D说:C最后,我第三//E说:我第四,A第一
5位运动员参加10米跳水比赛,他们预测结果均只有一半正确//A说:B第二,我第三//B说:我第二,E第四//C说:我第一,D第二//D说:C最后,我第三//E说:我第四,A第一
202 0