现在的位置: 首页 > 综合 > 正文

Delphi自学系列_2_Delphi中的整数_浮点数_字符_字符串

2012年08月23日 ⁄ 综合 ⁄ 共 3740字 ⁄ 字号 评论关闭

        经过两三天的学习,我发现Delphi中的数据类型比较多,而且比较灵活。尤其是字符串、字符这几个

类型。同时发现Delphi中还存在一些比较特殊的数据类型,比方说集合, 这个比较有意思,可以进行输入组合

的判断。

       

program DataStruct;

{$APPTYPE CONSOLE}
{
   本项目/工程用来测试D7中的各种数据类型
}

uses
  SysUtils;
type
   //整型数记录
   iStruct=record
      ishortint:shortint; //8位有符号整数
      iByte:byte;   // 8位无符号整数
      ismallint:smallint;     //16位有符号整数
      iword:word;       //16位无符号整数
      iInteger:integer;   //32位有符号整数
      iLongint:longint;   //32位有符号整数
      iCardinal:cardinal;  //32位无符号整数
      iLongword:longword;   //32位无符号整数
      iInt64:int64;         //64位有符号整数
   end;
   //浮点数记录
   fReal=record
      fsingle:single;     //4字节浮点数
      freal48:real48;     //6字节浮点数
      fdouble:double;     //8字节浮点数
      fextended:extended;   //10字节浮点数
      fcurrency:currency; //64位货币值
   end;

   //字符串记录
   strStruct=record
      strshortstring:shortstring;  //固定长度字节的字符串
      stransistring:ansistring;     //动态字符串
      strpchar:pchar;       //以NULL结束的字符串
      strwpchar:pwidechar;   //以NULL结束的宽字符串
      strwide:widestring;     //动态宽字符串
   end;

   //字符型记录
   charStruct=record
       ByteChar:char;
       WodeChar:widechar;
   end;
var
    myvar1:istruct;
    myvar2:freal;
    myvar3:strstruct;
    myvar4:charstruct;
    str:string[100];
begin
  { TODO -oUser -cConsole Main : Insert code here }
  {8位有符号整数
      如果用小于-128的值赋值给myvar1.ishortint,则编译报错
      如果用大于127的值赋值给myvar1.ishortint,则编译报错
  }
   myvar1.ishortint:=127;

  { 8位无符号整数
       如果用大于255的值赋值给myvar1.ibyte 则编译报错
       如果用小于0的值赋值给myvar1.ibyte则编译报错
   }
   myvar1.iByte:=255;
   writeln(myvar1.ibyte);

   { 16位有符号整数
       如果用小于-32768的值,或者大于32767的值赋值给myvar1.ismallint
       则编译报错
   }
   myvar1.ismallint:= 32767;

   {16位无符号整数
      如果用小于0的数赋值给mayvar1.iword,则编译报错
      如果用大于65535的数赋值给myvar1.iword,则编译报错
   }
   myvar1.iword:=65535;

   {32位有符号整数
      这个值比较大,通常32位的有符号整数可以满足一般的应用,
   }
   myvar1.iInteger:=39939339;
   myvar1.iInteger:=myvar1.iInteger*(-1);
   myvar1.iLongint:=myvar1.iinteger;

   {32 无符号整数
       这个值也较大,通常可以满足一般的应用
   }
   myvar1.iCardinal:=890879789;
   myvar1.ilongword:=myvar1.iInteger;


   {64位有符号整数
      在Object Pascal中没有提供64位的无符号整数类型
      这个类型的数数据范围更大,一般的应用如果数值不是太大
      建议不要使用这个类型的数据
   }
   myvar1.iInt64:=893802830283209;

   {4字节浮点数
       在数据变量被定义后,其所占的内存空间为4字节
       这就是sigle类型的数据,即单精度数据类型,
       通过实例可以知道单精度的精度是小数点后 6位
   }
   myvar2.fsingle:=3.93998777888;
   writeln(myvar2.fsingle);

   {6字节浮点数
      real48 这个类型的数据是为了和低版本的Delphi兼容才保留的,因此不作介绍
   }

   {8字节浮点数
       即双精度浮点数,在存在占用8字节
       通过实例可以知道,双精度浮点数的精度是小数点后13位
   }
   myvar2.fdouble:=3.141592678934545876;
   writeln(myvar2.fdouble);

   {10字节浮点数
       即extended类型的浮点数, 在内存中占用10个字节
       通过实例可以知道extended型浮点数的精度是小数点后14位
   }
   myvar2.fextended:=3.12345678910111213;
   writeln(myvar2.fextended);

   {8字节货币类型浮点数
       即currency类型的浮点数,在内存中占用8字节
       可以知道currency类型的浮点数的精度是小数点后4位数
   }
   myvar2.fcurrency:=3.123456789101112;
   writeln(myvar2.fcurrency);
   
   {固定长度是字符串
    在Object Pascal中定义的固定长度的字符串类型是shortstring
    这种数据类型可以容纳的字符长度最长是255个字节。
    并且字符串类型可以和数组类型一样引用
   }
   myvar3.strshortstring:='abcd';
   //这里有一点需要说明,在为shotstring分配的字节里面,
   //字符串的首字节存储的是字符串的长度。
   if myvar3.strshortstring[0]=#4 then
      writeln('the length of myvar3.strshortstring "',myvar3.strshortstring,'" is:',length(myvar3.strshortstring));

   { 动态字符串
       相对来说动态字符串比较灵活。
       可以利用关键字:string来定义字符串变量(准确的说应该是对象)
       但是这里存在一个问题,有那么多的字符串类型,那么string默认的定义类型是什么呢?
       在D2环境以后,string定义的对象,默认的定义为ansistring。
       可以通过编译开关/选项来修正这个默认选项
   }
   //开启编译选项
   {$H-}  //string定义的字符串为shortsting类型
   {$H+}  //string定义的字符串为ansistring
   {
     开启 H+选项后,存在一个例外,那就是指定字符串长度的时候,为shortstring类型
     如下: str为100字节长度的shortstring字符串对象
     str:string[100]
     前面定义了一个这样的变量,我们来测试一下它的长度
    }
    //下面语句输出的结果是101,说明系统默认会给字符串加上一个表示它长度的字节
    //同样可以验证,H+选项的例外情况
    writeln('the length of str is:',sizeof(str));

    { 以NULL结束的字符串
        由这个标题可以知道, shortstring、 ansistring字符串类型默认的字符串结束符
        不是NULL, 而可以是别的字符, 这就是与C语言中的“abcd”这样的字符长之间的
        区别,为了兼容win32 API函数,D中内置了以NULL结束的字符串类型
        pchar。
    }
    //Exp: 从下面的实例来看 sizeof在对pchar类型的字符串求长度时没有计算#0占用的空间
    //同时可以知道pchar在处理字符串时自动会在最后增加NULL字符
    //同样也可以知道 'abcd' 占用4字节空间。
    myvar3.strpchar:='abcd';
    if (myvar3.strpchar[4]= #0) and (myvar3.strpchar[0]='a') then
       writeln('the length of myvar3.strpchar is:',sizeof(myvar3.strpchar));

    {单字节字符
        这个就和C语言中的字符一样,
        可以用两种方法, 'a' 这种常量表示法
        或者用 #13这样的表示法
        我们可以知道:
            a = #61
        不知道单个字符在Delphi中怎么表示, 希望那位大侠解释下?
    }
    myvar4.ByteChar:=#61;
    if myvar4.ByteChar='a' then
       writeln('the myvar4.byte is:',#61);

   readln(myvar3.stransistring);
end.

        还有几个小问题没有解决:

             1、 Delphi中字符怎么表示, 我用'a'这样的格式进行测试发现没法和#61 兼容, 61是a的ASCII码值。

             2、 #这样是表示单个字符吗?  经过我前两天的学习和这几天的测试,发现这样就和C中的\061一样的

                  效果。

抱歉!评论已关闭.