基本数据类型

下面这张表是C++支持的基本数据类型

类型 含义 最小尺寸
bool 布尔 未定义
char 字符 8位
wchar_t 宽字符 16位
char16_t Unicode字符 16位
char32_t Unicode字符 32位
short 短整型 16位
int 整型 16位
long 长整型 32位
long long 长整型 64位
float 单精度浮点数 6位有效数
double 双精度浮点数 10位有效数字
long double 扩展精度浮点数 10位有效数字

C++语言规定,一个int至少和一个short一样大,一个long至少和一个int一样大,一个long long至少和一个long一样大。其中,long long是C++11新定义的类型。

通常short类型占16位(16比特),那么它的范围就是(-32768~32767)。

通常int类型占32位(1个字,32比特),那么它的范围就是(-2^31~2^31-1)。

通常long类型占64位(64比特),那么它的范围就是(-2^63 ~ 2^63-1)。

通常float类型占32位(1个字,32比特),它的精度为7位。

通常double类型占64位(2个字,64比特),它的精度为15位。

  1. #include <iostream>
  2. #include <limits>
  3.  
  4. using namespace std;
  5.  
  6. int main(){
  7. cout << "type:char\n";
  8. cout << "bytes = " << sizeof(char) << "\n\n";
  9.  
  10. cout << "type:short\n";
  11. cout << "bytes = " << sizeof(short) << "\n";
  12. cout << "smallest value = " << numeric_limits<short>::min() << "\n";
  13. cout << "largest value = " << numeric_limits<short>::max() << "\n\n";
  14.  
  15. cout << "type:int\n";
  16. cout << "bytes = " << sizeof(int) << "\n";
  17. cout << "smallest value = " << numeric_limits<int>::min() << "\n";
  18. cout << "largest value = " << numeric_limits<int>::max() << "\n\n";
  19.  
  20. cout << "type:long";
  21. cout << "bytes = " << sizeof(long) << "\n";
  22. cout << "smallest value = " << numeric_limits<long>::min() << "\n";
  23. cout << "largest value = " << numeric_limits<long>::max() << endl;
  24. return ;
  25. }

输出结果为:

  1. type:char
  2. bytes = 1
  3.  
  4. type:short
  5. bytes = 2
  6. smallest value = -32768
  7. largest value = 32767
  8.  
  9. type:int
  10. bytes = 4
  11. smallest value = -2147483648
  12. largest value = 2147483647
  13.  
  14. type:longbytes = 8
  15. smallest value = -9223372036854775808
  16. largest value = 9223372036854775807

除了上面的这些基本数据类型,其中整型可以划分为带符号的(signed)和无符号的(unsigned)两种。带符号的可以表示整数、负数和0,无符号的只能表示非负数。

short、int、long、long long表示有符号的,在它们的前面加上unsigned表示无符号的:unsigned short、unsigned int、unsigned long、unsigned long long。

无符号(unsigned)由于没有负数,所以取值范围和带符号(signed)的也不同:

unsigned short :0~2^16 - 1

unsigned int :0~2^32 - 1

unsigned long :0~2^64 -1

注意:浮点数(float和double)没有无符号的。

2.unsigned类型转化

在上面知道了signed和unsigned的取值范围不同,并且unsigned不能为负数。

那么如果故意给unsigned一个负数,会发生什么呢,编译器会报错吗?答案是不会,编译器会认为你所做的含有特殊的含义,编译器不会干涉你。

那么负的unsigned转化为正的unsigned的规则是什么呢?

规则:结果值等于这个负数加上数据类型unsigned的模。

  1. #include <iostream>
  2. using namespace std;
  3. int main(){
  4. unsigned int n = -;
  5. cout << "n = " << n << endl;
  6. return ;
  7. }

输出的结果值:

  1. n = 4294967286

由于unsigned int的模为2^32(4294967296),2^32+(-10)就是4294967286。

unsigned short 的模为2^16。
unsigned int 的模为2^32。
unsigned long 的模为2^64。

这样以来的话,那么一个正的unsigned可以和一个负的unsigned(转化后为正的)相等。

unsigned int m = 4294967295;

unsigned int n = -1;

那么 m == n 结果为true。-1转化后恰好是4294967295。

3.字面值

整型和浮点数字面值

以0开头的整数表示八进制,以0x或0X开头的整数表示十六进制。

浮点型字面值默认是一个double类型。

转义序列

换行 \n 横向制表符 \t
纵向制表符 \v 退格符 \b
反斜线 \\ 问号 \?
回车符 \r 进纸符 \f
警报 \a 单引号 \'
双引号 \"    

指定字面值的类型

字符和字符串

前缀 含义 类型
u Unicode16字符 char16_t
U Unicode32字符 char32_t
L 宽字符 wchar_t
u8 UTF-8 char

整型字面值

后缀 类型
u or U unsigned
l or L long
ll or LL long long

浮点型字面值

后缀 类型
f or F float
l 或 L long double

指针字面值

nullptr是指针字面值

例如:

  1. L'a' //wchar_t类型
  2. 42ULL //unsigned long long 类型
  3. 1E-3F //float类型
  4. .14L //long double类型

【C++】C++中的基本内置类型的更多相关文章

  1. 介绍Python中6个序列的内置类型

    1.Python中6个序列的内置类型分别是什么? Python包含6中内建的序列,即列表.元组.字符串.Unicode字符串.buffer对象和 xrange 对象.序列通用的操作包括:索引.长度.组 ...

  2. C++内置类型如何存放于计算机内存中

    摘要:内置类型的机器实现.字/字节/比特.内存 一.概念 计算机以比特序列存储数据,每个比特非0即1,如:00011011011100010110010000111011... 二.计算机以块来处理内 ...

  3. C++ x86程序与x64程序中,各种内置类型的大小比较

    代码: #include <iostream> #include <cstdio> #include <list> #include <string> ...

  4. Python3中内置类型bytes和str用法及byte和string之间各种编码转换,python--列表,元组,字符串互相转换

    Python3中内置类型bytes和str用法及byte和string之间各种编码转换 python--列表,元组,字符串互相转换 列表,元组和字符串python中有三个内建函数:,他们之间的互相转换 ...

  5. python中6个序列的内置类型分别是什么,列表和元组的异同有哪些

    1.Python中6个序列的内置类型分别是什么? Python包含6中内建的序列,即列表.元组.字符串.Unicode字符串.buffer对象和 xrange 对象.序列通用的操作包括:索引.长度.组 ...

  6. dart系列之:dart语言中的内置类型

    目录 简介 Null 数字 字符串 布尔值 列表 set和map 简介 和所有的编程语言一样,dart有他内置的语言类型,这些内置类型都继承自Object,当然这些内置类型是dart语言的基础,只有掌 ...

  7. JavaScript备忘录(1)——内置类型

    JavaScript有一些内置类型,还有很多常用的内置的方法,本文稍作总结,以备查阅. 值类型 我的理解,值类型是分配在栈上的,而引用类型(当然也包括引用类型内部的值类型)是分配在堆上的.值类型是不可 ...

  8. Python——内置类型

    Python定义了丰富的数据类型,包括: 数值型:int, float, complex 序列:(iterable) str, unicode, tuple, list, bytearray, buf ...

  9. C++内置类型对象之间的转换

    C++定义了一组内置类型对象之间的标准转换,在必要时它们被编译器隐式地应用到对象上. 隐式类型转换发生在下列这些典型情况下. 1. 在混合类型的算数表达式中 规则:在这种情况下最宽的数据类型成为目标转 ...

随机推荐

  1. 双重保险——前端bootstrapValidator验证+后台MVC模型验证

    我们在前端使用BoostrapValidator插件验证最基本的格式要求问题,同时在后台中,使用MVC特有的模型验证来做双重保险.对于boostrapValidator我就不说了,具体请看<bo ...

  2. BZOJ.4559.[JLOI2016]成绩比较(DP/容斥 拉格朗日插值)

    BZOJ 洛谷 为什么已经9点了...我写了多久... 求方案数,考虑DP... \(f[i][j]\)表示到第\(i\)门课,还有\(j\)人会被碾压的方案数. 那么\[f[i][j]=\sum_{ ...

  3. BZOJ.1812.[IOI2005]Riv 河流(树形背包)

    BZOJ 洛谷 这个数据范围..考虑暴力一些把各种信息都记下来.不妨直接令\(f[i][j][k][0/1]\)表示当前为点\(i\),离\(i\)最近的建了伐木场的\(i\)的祖先为\(j\),\( ...

  4. 基于Systick系统时钟延时的LED闪烁灯

    1.回顾我们的51 单片机编程,当我们需要做系统延迟的时候,最常采用的一种方式就是使用for 循环的空语句等待来实现. 当然,在STM32 里面也可以这么实现.但是在STM32 的Cortex 内核里 ...

  5. 2017中国无人机公开赛 总决赛 CDR Final 竞赛规则

    2017中国无人机公开赛总决赛 CDR Final竞赛规则 V2 二〇一七年八月(修订) 一. 竞赛项目描述(一) 无人机绕标竞速赛(专业组)飞行员通过佩戴眼镜或显示屏采用第一视角飞行,使用无线电遥控 ...

  6. Django content-type 使用

    1.models class PricePolicy(models.Model): """价格与有课程效期表""" content_type ...

  7. 【Newtonsoft.Json】自己实现JsonConverter ,精简返回的数据结果

    Newtonsoft.Json的Json数据转换很好用,也提供了很多直接使用的类型

  8. vue使用babel+sass出错解决

    按照官网的步骤先将vue项目建立好,这时如果使用lang="babel",lang="scss"会报错. 这时终端进入项目文件夹下输入以下命令: npm ins ...

  9. numpy中的广播机制

    广播的引出 numpy两个数组的相加.相减以及相乘都是对应元素之间的操作. import numpy as np x = np.array([[2,2,3],[1,2,3]]) y = np.arra ...

  10. reduce方法简单实现数组中对象去重

    js数组的reduce方法,接收一个函数(必须)和指定的初始值(非必须)作为参数,函数有三个参数,分别为初始值,当前项,当前数组,进行累加或者累积操作,初始值为每次累加或者累计后的结果 注意:在ie9 ...