c++从零开始---数据类型之整型1

内置的 c++ 类型分两组:基本类型和复合类型。基本类型包括整型和浮点型。在基本类型的基础上创建的为复合类型,包括数组、字符串、指针和结构。
本节主要介绍基本类型中的整形

整数就是没有小数部分的数字,比如2、98、-1、0。c++为用户提供好几种整型,不同的 c++ 整型提供不同的内存量来储存整数,使用的内存量越大,可以表示的整数范围也越大。术语宽度用于描述储存整数时使用的内存量,使用的内存越多则越宽。符号类型可表示正值和负值,无符号类型不能表示负值。c++ 的基本整型包括(按宽度递增的顺序排列)char 、short 、int、long、long long,其中每种类型都有符号类型和无符号类型,因此总共有10种类型可供选择。

1、位和字节

计算机内存的基本单元是位(bit),每一个位有两种状态:0和1 。因此8位的组合有 2^8 =256种,可以表示 0 ~ 255 或者 -128 ~ 127 。
通常一个字节(bite)指的是8位的内存单元。通常来说可以用8位字节来度量计算机的内存量,即1KB = 1024 B,1MB = 1024KB。但是c++略有不同,c++字节由至少能够容纳实现的基本字符集的相邻位组成,也就是说,可能取值的数目必须等于或超过字符数目。

比如在ASCII码中,基本字符不到128个(基本字符就是数字、字母以及一些特殊符号如*),那么一个字节就可以用8位表示,但是如果编程使用的字符集超过了128个(比如国际编程中使用的Unicoude),那么用8位字节不能完全表示基本字符,编程就会出现错误。比如我编程时需要符号 z ,但是程序不能给出符号 z

2、整型short、int、long、long long

2.1 各个类型需要满足的条件

  • short 至少 16 位;
  • int 至少与 short 一样长;
  • long 至少 32 位,且至少与 int 一样长;
  • long long 至少 64 位,且至少与 long 一样长。

当前很多系统都使用最小长度,即short为 16 位,long为 32 位,这样 int 有多种选择,即可以为 16 位、24 位和 32 位。

2.2 头文件 climits

头文件 climits 定义了符号常量,如 INT_MAX 表示 int 能够储存的最大值。在使用 16 位的 int 的老系统中,climits 文件将 INT_MAX定义为32767(2^16 - 1)

符号常量为预处理命令定义的,将一个符号定义为一个常量,在之后的程序段中,使用这个符号即表示使用这个常量,这样的方法是为了方便修改常量值,因为当需要修改时,只需要更改程序段开头的符号常量的定义值

2.3 初始化

初始化将赋值与声明合并在一起,这样可以避免以后忘记给它赋值的情况发生。因为如果不对函数内部定义的变量进行初始化,该变量的值将是不确定的,这意味着该变量的值将是它被创建之前,相应内存单元保存的值。初始化示例如下:

int n_int = 32767;
int n_int(32767); // c++ 里面独有的初始化方法

3、无符号整型

创建无符号整型时,使用关键字 unsigned,此处的 unsigned 实际为 unsigned int 的缩写。示例如下:

unsigned short a;
unsigned int b;
unsigned long c;
unsigned long long d;

同样可使用与符号整型相同的初始化方法进行初始化。

另外,因为储存数据时采用的是二进制计数,当数字溢出时,其值将为范围另一端的取值。比如 8 位数据,当二进制表示为11111111时,此时再加上一个数,那么该数变为 0 。

下面用一段程序进行演示:

// exceed .cpp -- exceeding some integer limits
#include <iostream>
#include <climits>
int main()
{
	using namespace std;
	short a = SHRT_MAX;  //将 short 的最大值赋值给a
	unsigned short b = 0;//给无符号 short 变量 short 赋值为0
	cout << "now a and b is: " << a << ",  " << b << endl; //输出a 和 b
	a = a + 1; // a 本身为 short 可以表示的最大值,现在给 a 加 1,那么 a 溢出,得到 short 范围另一端的取值
	b = b - 1; // b 本身为无符号类型,给其减 1 ,那么其值同样溢出,得到另一端的取值
	cout << "a + 1 = :" << a << endl << "b - 1 = :" << b << endl;
	return 0;
}

输出结果为:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值