havdone's guarden

博客园 首页 新随笔 联系 订阅 管理

C++ Basic: bits, simply data type

Jin Tu

Bolg: http://www.inblogs.net/havdone

Abstraction

This article help to make sense of the various data types in programming languages by C++ data type.

32 bits Operation System

X-bits (32 bits or 64bits) operation system refers primarily that the number of bits used to represent memory addresses is x bits in operation system. (www.webopedia.com)

In 32 bits windows, the length of all pointers is 32 bits. “Operating systems based on Microsoft Windows NT technologies have always provided applications with a flat 32-bit virtual address space that describes 4 gigabytes (GB) of virtual memory. The address space is usually split so that 2 GB of address space is directly accessible to the application and the other 2 GB is only accessible to the Windows executive software.”(Microsoft)

C++ simply data type

The simply data type is the fundamental data type in c++ as it has become the building block of a structured data type. (Malik, D, S 2004) It can be categorized into three types:

1.       Intergral: to deal with integers, or numbers without a decimal part;

2.       Floating-point: to deals with decimal numbers;

3.       Enumeration type: it is a user-defined data type. (Malik, D, S 2004)

Integral data type in C++ contains:

l  short(2 bytes)

l  long(4 bytes)

l  int(4 bytes)

l  bool(1 byte)

l  char(1 bytes)

l  unsigned char

l  unsigned short

l  unsigned int

l  unsigned long

The smallest data type is char (1 byte), and the largest data type is long. And 1 byte equals 8 bits.

Floating-point data type contains:

l  float(4 bytes)

l  double(8 bytes)

l  long double (8 bytes)

 

²  Long double and double actually is the same for the newer compiler;

²  A wchar_t data type actually is an unsigned short type, as they are all unsigned double bytes;

²  A bool type also is a int type, and its value is zero or one;

²  A int type is a long type

The differences between long and float

float i=111111;//111111.00

long l=111111;//111111

float data type:80 03 d9 47

long data type:07 b2 01 00

As mentioned in the above section, long is a data type which deals with integer and numbers without decimal part, and float is a data type which deals with decimal number(-3.4E+38 to 3.4E+38).

Type Conversion

Implicit or explicit conversion

It is likely that successfully implicit or explicit converting smaller bytes of data type to larger bytes of data type, otherwise, it is likely that uncertain danger occur. The positively safe conversions include:

l  int to float and float to double

l  char to wchar_t

l  char to int

l  short to long

l  bool to int

l  wchar_t to unsigned short

l  long to int and short to int

l   

It should be verified by programmers whether it is safe for conversions except the above. For instance:

l  int to char or int to long or int to short

l  wchar_t to char

l  short to wchar_t

 

Conversion functions

Example

//////////////////////////////////////////////////////////

     //Pretend 1 byte = 8 bits

     //////////////////////////////////////////////////////////

     int i=9;// 4 bytes=32bits

     short s=1;//2 bytes

     long l=2L;//4 bytes

     char c='3';//1byte

     float f=111111;//4 bytes

     long l1=111111;

     double d=333333;//8 bytes

     long double ld=333333;// 8 bytes

 

     wchar_t w='4';//2 bytes

     wchar_t wc=L'';//2 bytes, L get the Unicode of right nearest string or char,

                       //make targets to 2 bytes unsigned data type

 

     unsigned uVal = 328u;             // Unsigned value

     long lVal = 0x7FFFFFL;            // Long value specified

                                          //as hex constant

     unsigned long ulVal = 0776745ul;  // Unsigned long value

    

     ////////////////////////////////////////////////////////////////////////

     //Convertion

     //from smaller bytes of data type to larger bytes of data type, it is safe!

     //from a data type to the same bytes of data type, it is safe!

     //////////////////////////////////////////////////////////////////////

    

     //char to int: 1 byte to 4 byte

     char cc='h';

     int ic=int(cc);//equal static_cast<int> cc

 

     //put pointer's value (address)  into long data type.

     //pointer is 32-bit(4 bytes) data type in 32 bit OS

     //4 bytes to 4 bytes

     char * pc="test";

     long sc =long(pc);

     long * lp=(long*)sc;

 

     //char to wchar_t:1 byte to 2 byte

     wchar_t wcc=wchar_t(cc);

 

     //wchar_t to short: 2 bytes to 2 bytes

     short sct=short(wcc);

 

 

     //wchar_t * to short *:ponter of 2bytes to pointer of 2bytes

     wchar_t* wcp=L"fsd";

     long lwcp=long(wcp);

     unsigned short * uswcp=(unsigned short*)lwcp;

unsigned short * sp=(unsigned short *) wcp;   

posted on 2008-01-11 23:06  ajin  阅读(463)  评论(0编辑  收藏  举报