一点一滴《C++处理数据》

1:(整数)short,int,long类型

short:至少16位

Int:至少与short一样长

long:至少32位,且至少与int一样长

   

下来看下程序输出的结果:

#include <iostream>

#include <math.h>

#include <limits>

using namespace std;

   

int main()

{

int a=INT_MAX;

short b=SHRT_MAX;

long c=LONG_MAX;

   

cout<<"int is"<<sizeof(a)<<"bytes"<<endl;

cout<<"short is"<<sizeof(b)<<"bytes"<<endl;

cout<<"long is"<<sizeof(c)<<"bytes"<<endl;

   

cout<<"最大值"<<endl;

cout<<"int"<<a<<endl;

cout<<"short"<<b<<endl;

cout<<"long"<<c<<endl;

   

cout<<"最小值"<<INT_MIN<<"----"<<CHAR_BIT<<endl;

return 0;

}

输出为:

int is 4 bytes

short is 2 bytes

long is 4 bytes

int 的最大值:2147483647

short的最大值:32767

long的最大值:2147483647

int的最小值:-2147483648

一个byte是8个bit

这些我都是在 Windows 7 x64 旗舰版上测试的,其它的系统就没测试了,估计也有一样和不一样的。

2:操作符 sizeof和头文件limits

sizeof操作符指出,在使用8位字节的系统中,int的长度为4个字节。可以对类型名和变量名使用sizeof操作符。

如:cout<<"int is"<<sizeof(int)<<"bytes"<endl;

   

climits的符号常量

符号常量

表示

CHAR_BIT

char的位数

CHAR_MAX

char的最大值

CHAR_MIN

char的最小值

SCHAR_MAX

signed char的最大值

SCHAR_MIN

signed char的最小值

UCHAR_MAX

unsigned char的最大值

SHRT_MIN

short的最小值

SHRT_MAX

short的最大值

USHRT_MAX

unsigned short的最大值

INT_MAX

int的最大值

INT_MIN

int的最小值

UINT_MAX

unsigned int的最大值

LONG_MAX

long的最大值

LONG_MIN

long的最小值

ULONG_MAX

unsigned long的最大值

   

3:初始化

将声明和赋值合并在一起:如

int a=INT_MAX;

   

注:不对函数内部定义的变量初始化,该变量的值将是不确定的。这意味该变量的值将是它被创建之前,该内存单元保存的值

4:无符号类型

unsigned short a;

unsigned int b;

unsigned c;

a,b,c都是int类型

   

看段程序:

#include <iostream>

#include <limits>

using namespace std;

#define ZERO 0

int main()

{

short a=SHRT_MAX;

unsigned short b=a;

cout<<"a has $"<<a<<"and b add $1 to each account"<<endl<<"NOW";

a=a+1;

b=b+1;

cout<<"a has $"<<a<<"and b has $"<<b<<endl;

a=ZERO;

b=ZERO;

cout<<"a has $"<<a<<"and b has $"<<b<<endl;

cout<<"take $1 to each account"<<endl;

a=a-1;

b=b-1;

cout<<"a has $"<<a<<"and b has $"<<b<<endl;

cin>>a;

return 0;

}

   

   

解释下这段程序:

short类型的a和unsigned short类型的b都取最大值,在这里最大值是:32767。

从而都加上1,从这开始这两个的值都变了,short类型的最大值还要再加上1,可以见得,a的值变成:-32768

unsigned short类型的b值变成:32768

下来同时设置a和b的值为:0,再减去1,从而得出的结果为

short类型的a最后值为:-1

unsigned short类型的b最后值为:65535

   

可以看出,整形变量的行为就是里程表。如果超出了限制,其值为另一端的值。

如下图:典型的整形溢出行为

   

5:选择整形类型

什么情况是用什么类型,这可真是个麻烦啊。

一般基本都是int类型,而超出int类型范围的用long类型。

所以要看具体情况而定用什么类型,现在电脑基本都是X86或者X64 的电脑,不存在16位的电脑,所以随便用,但也要注意点用,越节约越好。

6:整形常量

如:

int a=42;

int b=0x42;

int c=042;

cout<<a<<endl;

cout<<b<<endl;

cout<<c<<endl;

   

   

1:第一位为1-9,则基数为10(10进制)

2:第一位为0,第二位为1-7,则基数为8(8进制)

3:前两位为0x,或者0X,则基数为16(16进制),对于16进制数:a-f,A-F表示了16进制位,对应与10-15.0xF为15,ox45为165(10个16加5个1)。

cout默认是以10进制显示的。

显示上面的列子为:

42

66

34

7:如何确定常量的类型

如把1900确定什么类型呢,答案马上揭晓。(如果使用了特殊的后缀表示特定的类型,或者值太大,不能存储为int类型。)否则都是i存储nt类型。

   

数字后面跟上字母,字母表示的是数字的类型。

整数后面跟的是l或者L表示该整数类型为:long,u或者U后缀表示unsigned int常量。ul(可以表示任何一种顺序,大小写都可以)表示unsigned long类型的常量(例如:22022LU或者22022UL都被存储为unsigned long类型)。

接下来考察的是数字的长度。

对与不带后缀的10进制的数字来说:2000表示int类型,40000表示long类型,3000000000表示unsigned long类型。

对于不带后缀的16进制的数字来说:0x9c40(40000)表示unsigned int类型。这表示的内存的地址

   

因此:unsigned int 比long更为合适的表示16位地址

8:char类型:字符和小数

char a;

cout<<"enter string"<<endl;

cin>>a;

cout<<a<<endl;

   

假如输入的是:M

输出的是M呢,还是77,显而易见的是M。而在内存中的值是:77

char a;

cout<<"enter string"<<endl;

cin>>a;

int b=a;

cout<<"The ASCII code for"<<a<<"is"<<b<<endl;

b=b+1;

cout<<"The ASCII code for"<<a<<"is"<<b<<endl;

cout<<"using cout.put()"<<endl;

cout.put(a);

输入:M

输出:77

78

M

所以就cout.put();就很关键了。

9:cout.put()函数

cout.put();可以代替<<操作符

它提供了一种显示字符的方法。不用在转换ASCII码了!

   

10:char常量

   

   

11:通用字符名

12:signed char和unsigned char

13:

14:const 限定符

   

   

posted @ 2012-12-07 14:19  微米大大  阅读(1075)  评论(0编辑  收藏  举报