C++学习(五)入门篇——基本类型

面向对象编程的本质是设计并扩展自己的数据类型,让类型和数据匹配。

内置C++分成两种类型:基本类型和复合类型

1.简单变量

程序需要存储信息时,必须记录三个基本属性

  (1)信息将存储在哪

  (2)要存储什么值

  (3)存储何种类型的值

如:

int braincount;
braincount=5;

这语句表明它正在存储整数,用braincount表示该整数的值,程序将找到一块能够存储整数的内存,将该内存标记为braincount,并把5复制到该内存单元中。

这些语句没说这个值将存储在内存的什么位置,但程序确实记录了这种信息。可使用&来检索braincount的内存地址。

 

2.变量名

(1)在名称中只能使用字母字符、数字和下划线

(2)名称的第一个字符不能是数字

(3)区分大写字母和小写字母

(4)不能将C++关键字用作名称

(5)以两个下划线或下划线和大写字母打头的名称被保留给实现(编译器及其使用的资源)使用。以一个下划线开头的名称被保留给实现,用作全局标识符。

(6)C++对名称长度没有限制,名称中所有字符都有意义,但某些平台有长度限制

如ANSIC标准前63个字符相同则认为名称相同,即使第64个不同

 

如果想用两个或更多的单词组成一个名称,通常用下划线字符将单词分开,如my_onions,或者从第二个单词开始将每个单词的第一个字母大写,如myEyeTooth

术语宽度用于描述存储整数时使用的内存量,使用内存越多,则越宽

 

3.整型short、int、long和long long

计算机内存由一些叫位(bit)的单元组成

16≤short≤int≤long≤long long

且32≤long和64≤long long

字节(byte)通常指8位(bit)的内存单元

很多系统都使用最小长度,short16位,long32位,int可以为16、24或32位。

int也可为64位,long和long long至少64位。

short是short int的简称,long是long int的简称。

这四种都是符号类型,取值范围中,负值和正值几乎相同,16位的int取值范围-32768到+32767

用C++工具来检查类型的长度,sizeof返回类型或变量的长度,单位为字节

字节的含义依赖于实现,一个系统中,两字节的int可能是16位,另一个系统可能为32位。

头文件climits包含了关于整型限制的信息,定义了各种限制的符号名称,如INT_MAX为int的最大取值,CHAR_BIT为字节的位数。

程序清单3.1 limits.cpp
//
limits.cpp - - some integer limies #include<iostream> #include<climits> int main() { using namespace std; int n_int = INT_MAX; short n_short = SHRT_MAX; long n_long = LONG_MAX; long long n_llong = LLONG_MAX; cout << "int is " << sizeof (int) << " bytes." << endl; cout << "short is " << sizeof n_short << " bytes." << endl; cout << "long is " << sizeof n_long << " bytes." << endl; cout << "long long is " << sizeof n_llong<< " bytes." << endl; cout << "Maximum values:" << endl; cout << "int: " << n_int << endl; cout << "short:" << n_short << endl; cout << "long:" << n_long << endl; cout << "long long:" << n_llong << endl; cout << "Minimum int value=" << INT_MIN << endl; cout << "Bits per Byte=" << CHAR_BIT << endl; cin.get(); }

1.运算符sizeof和头文件limits

对类型名(如int)使用sizeof时,应将名称放在括号中

但对变量名(如n_short)使用该符号,括号是可选的

头文件climits定义了符号常量来表示类型的限制

下表对文件中定义的符号常量进行了总结

climits中的符号常量
符号常量  表示

CHAR_BIT

char的位数
CHAR_MAXchar的最大值
CHAR_MIN  char的最小值
SCHAR_MAXsigned char的最大值
SCHAR_MINsigned char的最小值
UCHAR_MAXunsigned char的最大值
SHRT_MAXshort的最大值
SHRT_MINshort的最小值
USHRT_MAXunsigned char的最大值
INT_MAXint的最大值
INT_MINint的最小值
UNIT_MAXunsigned int的最大值
LONG_MAXlong的最大值
LONG_MINlong的最小值
ULONG_MAXunsigned long的最大值
LLONG_MAXlong long的最大值
LLONG_MINlong long的最小值
ULLONG_MAXunsigned long long的最大值

climits文件中包含下面类似语句:

#define INT_MAX 32767

该编译指令告诉预处理器:在程序中查找INT_MAX,并将所有的INT_MAX替换为32767。

 

2.初始化

int owls=101;

C++还有种C语言没有的初始化语法:

int wrens(432);

如果不对函数内部定义的变量进行初始化,该变量的值将不确定,意味该变量值是它被创建之前,相应内存单元保存的值。

采用大括号初始化方式:

可用=,也可以不用

int emus{7};

int rheas{12};

其次,可以不包含任何东西,变量将被初始化为0

int rocs={};

int psychics{};

第三,可以更好的防范类型转换错误。

 

无符号类型

无符号变体的优点是可以增大变量能够存储的最大值

如short的范围为-32768到+32767,无符号版本为0到65535

unsigned是unsigned int的缩写

//exced.cpp - - exceeding some integer limits
#include<iostream>
#include<climits>

int main()
{
    using namespace std;
    short sam = SHRT_MAX;
    unsigned short sue = sam;

    cout << "Sam has " << sam << " dollars and Sue has " << sue;
    cout << " dollars deposited." << endl
        << "Add $1 to each account." << endl << "Now";
    sam = sam + 1;
    sue = sue + 1;
    cout << " Sam has " << sam << " dollars and Sue has " << sue;
    cout << " dollars deposited.\nPoor Sam!" << endl;

    sam = 0;
    sue = 0;
    cout << "Sam has " << sam << " dollars and Sue has " << sue;
    cout << " dollars deposited." << endl
        << "Take $1 from each account." << endl << "Now";
    sam = sam - 1;
    sue = sue - 1;
    cout << " Sam has " << sam << " dollars and Sue has " << sue;
    cout << " dollars deposited." << endl << "Lucky Sue!" << endl;
    cin.get();
}

这些整型变量的行为就像里程表,如果超越了限制,其值将在范围的另一端取值。

int被设置为对目标计算机而言最自然的长度,即计算机处理起来最有效率的长度。

节省一点就是赢得一点。

 

整型字面值:

如果第一位为0~9,则基数为10(十进制)

如果第一位为0,第二位1~7,则基数为8(八进制)

如果前两位为0x或0X,则基数为16(十六进制)

//hexoct1.cpp - - shows hex and otcal literals
#include<iostream>
int main()
{
    using namespace std;
    int chest = 42;
    int waist = 0x42;
    int inseam = 042;

    cout << "Monsieur cuts a striking figure!\n";
    cout << "chest=" << chest << " (42 in decimal)\n";
    cout << "waist=" << waist << " (0x42 in hex)\n";
    cout << "inseam=" << inseam << " (042 in octal)\n";
    cin.get();
}

都转化为了十进制

如果像CGA视频内存段为十六进制B000,则不必在程序中使用之前转化为十进制,只要使用0xB000即可,不管哪种类型的值,在计算机中都被存储为二进制的形式。

如果要以十六进制或者八进制的形式显示,要是用cout的一些特殊特性,采用控制符dec、hex和oct

//hexoct2.cpp - - display values in hex and octal
#include<iostream>
int main()
{
using std::cout;
//using std::cin;
using std::oct;
//using std::hex;
//using namespace std;
int chest = 42;
int waist = 42;
int inseam = 42;

cout << "Monsieur cuts a striking figure!\n";
cout << "chest=" << chest << " (decimal for 42)\n";
cout <<std::hex; //也可以这样
cout << "waist=" << waist << " (hexadecimal for 42)\n";
cout << oct;
cout << "inseam=" << inseam << " (octal for 42)\n";
std::cin.get();
}

cout<<hex不会在屏幕上显示任何内容,只是修改cout显示整数的方式。

转载于:https://www.cnblogs.com/daisyliar/p/7221627.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值