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定义了符号常量来表示类型的限制
下表对文件中定义的符号常量进行了总结
| 符号常量 | 表示 |
|
CHAR_BIT |
char的位数 |
| CHAR_MAX | char的最大值 |
| CHAR_MIN | char的最小值 |
| SCHAR_MAX | signed char的最大值 |
| SCHAR_MIN | signed char的最小值 |
| UCHAR_MAX | unsigned char的最大值 |
| SHRT_MAX | short的最大值 |
| SHRT_MIN | short的最小值 |
| USHRT_MAX | unsigned char的最大值 |
| INT_MAX | int的最大值 |
| INT_MIN | int的最小值 |
| UNIT_MAX | unsigned int的最大值 |
| LONG_MAX | long的最大值 |
| LONG_MIN | long的最小值 |
| ULONG_MAX | unsigned long的最大值 |
| LLONG_MAX | long long的最大值 |
| LLONG_MIN | long long的最小值 |
| ULLONG_MAX | unsigned 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 + ;
sue = sue + ;
cout << " Sam has " << sam << " dollars and Sue has " << sue;
cout << " dollars deposited.\nPoor Sam!" << endl; sam = ;
sue = ;
cout << "Sam has " << sam << " dollars and Sue has " << sue;
cout << " dollars deposited." << endl
<< "Take $1 from each account." << endl << "Now";
sam = sam - ;
sue = sue - ;
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 = ;
int waist = 0x42;
int inseam = ; 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显示整数的方式。
C++学习(五)入门篇——基本类型的更多相关文章
- Swift入门篇-基本类型(2)
现在我也在学习Swift语言,常常去逛很多苹果社区和论坛,看到了圈子很多奇怪的现象,发现很多人都赶忙去翻译 Swift书籍 和 发布Swift的视频 .他们这种对新知识的探索精神我本人是很佩服的.但是 ...
- PHP学习笔记 - 入门篇(3)
PHP学习笔记 - 入门篇(3) 常量 什么是常量 什么是常量?常量可以理解为值不变的量(如圆周率):或者是常量值被定义后,在脚本的其他任何地方都不可以被改变.PHP中的常量分为自定义常量和系统常量 ...
- Java工程师学习指南 入门篇
Java工程师学习指南 入门篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...
- Elasticsearch学习记录(入门篇)
Elasticsearch学习记录(入门篇) 1. Elasticsearch的请求与结果 请求结构 curl -X<VERB> '<PROTOCOL>://<HOST& ...
- PHP学习笔记 - 入门篇(5)
PHP学习笔记 - 入门篇(5) 语言结构语句 顺序结构 eg: <?php $shoesPrice = 49; //鞋子单价 $shoesNum = 1; //鞋子数量 $shoesMoney ...
- PHP学习笔记 - 入门篇(4)
PHP学习笔记 - 入门篇(4) 什么是运算符 PHP运算符一般分为算术运算符.赋值运算符.比较运算符.三元运算符.逻辑运算符.字符串连接运算符.错误控制运算符. PHP中的算术运算符 算术运算符主要 ...
- PHP学习笔记--入门篇
PHP学习笔记--入门篇 一.Echo语句 1.格式 echo是PHP中的输出语句,可以把字符串输出(字符串用双引号括起来) 如下代码 <?php echo "Hello world! ...
- netty深入学习之一: 入门篇
netty深入学习之一: 入门篇 本文代码下载: http://download.csdn.net/detail/cheungmine/8497549 1)Netty是什么 Netty是Java NI ...
- PHP学习笔记 - 入门篇(2)
PHP入门篇(2) 什么是变量 变量是用于存储值的容器,如下 $var = @"6666" 如何定义变量 定义变量就是像服务器的内存申请空间,用来存储数据,eg: <?php ...
- RabbitMq学习一入门篇(hello world)
简介 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python.Ruby..NET.Java,也是众多消息队列中表现不俗的一员,作用就是提高系统的并发 ...
随机推荐
- 封装TableView有可能用到的数据结构和UITableViewCell的一个继承类
最近4年的时间,我已经做了5个App完全独立开发, 工作经历5个App, 维护了两个App. 在这期间用的最多的是UITableView, 因此也有许多感觉可以封装的. 现在就是我封装的. RXCel ...
- Spring学习(13)--- 基于Java类的配置Bean 之 @Configuration & @Bean注解
基于Java配置选项,可以编写大多数的Spring不用配置XML,但有几个基于Java的注释的帮助下解释.从Spring3.0开始支持使用java代码来代替XML来配置Spring,基于Java配置S ...
- winfrom DataSet和实体类的相互转换
最近做WInfrom项目,对表格和控件的数据绑定非常喜欢用实体类对象来解决,但是绑定以后 又怎么从控件中拿到实体类或者转换为datatable 或者dataset呢 经过在网上的搜索以及自己的改进 完 ...
- Web压力测试软件webbench
官方网站:http://home.tiscali.cz/~cz210552/webbench.html下载地址:http://home.tiscali.cz/~cz210552/distfiles/w ...
- .NET中使用Redis总结
注:关于如何在windows,linux下配置redis,详见这篇文章:) 启动遇到问题 使用命令[redis-server.exe redis.windows.conf],启动redis 服务[如果 ...
- Angular JS从入门基础 mvc三层架构 常用指令
Angular JS从入门基础 mvc模型 常用指令 ★ 最近一直在复习AngularJS,它是一款优秀的前端JS框架,已经被用于Google的多款产品当中.AngularJS有着诸多特性,最为核心 ...
- GIS与水文分析(1)GIS与水文学
GIS与水文分析(1)GIS与水文学 对于大部分GIS从业人员或者利用GIS作为研究方向的人员来说,水文学过于专业,更偏重于理论化,很难从GIS的角度来模拟和分析水文的过程.这其实是个普遍性的问题,任 ...
- Winform中Chart图表的简单使用
在常见的一些数据采集的系统中, 都少不了一个就是, 数据分析, 无论是报表的形式, 还是图形的形式. 他都是可以迅速的展现一个数据趋势的实现方法, 而今天, 就是简单介绍一下, 微软的工具库自带的 C ...
- docker 汇总
整理中 ... 一. docker 基础 配置参数最佳实践 二. docker 编排工具 docker swarm mesos kubernetes AWS ECS 三. docker 生态 dock ...
- 10分钟轻松学会python turtle绘图
 1. 画布(canvas) 1.1 相关函数: 2. 画笔 2.1 画笔的状态 2.2 画笔的属性 2.3 绘图命令 3. 命令详解 4. 绘图举例 4.1 太阳花 4.2 绘制小蟒蛇 4.3 绘 ...