基本数据类型

下面这张表是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位。

#include <iostream>
#include <limits> using namespace std; int main(){
cout << "type:char\n";
cout << "bytes = " << sizeof(char) << "\n\n"; cout << "type:short\n";
cout << "bytes = " << sizeof(short) << "\n";
cout << "smallest value = " << numeric_limits<short>::min() << "\n";
cout << "largest value = " << numeric_limits<short>::max() << "\n\n"; cout << "type:int\n";
cout << "bytes = " << sizeof(int) << "\n";
cout << "smallest value = " << numeric_limits<int>::min() << "\n";
cout << "largest value = " << numeric_limits<int>::max() << "\n\n"; cout << "type:long";
cout << "bytes = " << sizeof(long) << "\n";
cout << "smallest value = " << numeric_limits<long>::min() << "\n";
cout << "largest value = " << numeric_limits<long>::max() << endl;
return ;
}

输出结果为:

type:char
bytes = 1 type:short
bytes = 2
smallest value = -32768
largest value = 32767 type:int
bytes = 4
smallest value = -2147483648
largest value = 2147483647 type:longbytes = 8
smallest value = -9223372036854775808
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的模。

#include <iostream>
using namespace std;
int main(){
unsigned int n = -;
cout << "n = " << n << endl;
return ;
}

输出的结果值:

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是指针字面值

例如:

L'a' //wchar_t类型
42ULL //unsigned long long 类型
1E-3F //float类型
.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. position的定义

    position的属性有哪些 static :静态属性,默认布局 absolute:绝对定位:除了static之外的以其他属性定位,除此之外相对于body, fixed:固定定位:脱离文档流,滚动条不 ...

  2. Codeforces 1130D1 Toy Train (Simplified) (思维)【贪心】

    <题目链接> 题目大意: 有一个的环形火车站,其中有$[1,n] n$个站台,站台上能够放糖果,火车只能朝一个方向移动,如果火车在站台$i$,那么下一秒就会在$i+1$站(如果$i=n$, ...

  3. Javascript的DOM总结

    Javascript的DOM总结 DOM DOM 是 W3C(万维网联盟)的标准.DOM 定义了访问 HTML 和 XML 文档的标准: "W3C 文档对象模型(DOM)是中立于平台和语言的 ...

  4. Elasticsearch 基于 URL 的搜索请求

    背景 Elasticsearch 不像关系型数据库,没有简易的 SQL 用来查询数据,只能通过调用 RESTful API 实现查询.大体上查询分为两种,基于 URL 的和基于请求主体的.基于 URL ...

  5. 【C#】获取URL上的参数

    图是不知道什么时候截的,给不了原链接了QAQ

  6. 错误代码:0x80070032 处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”

    错误分析: vs2010默认采用的是.NET 4.0框架,4.0框架是独立的CLR,和.NET 2.0的不同,如果想运行.NET 4.0框架的网站,需要用aspnet_regiis注册.NET 4.0 ...

  7. Hexo 搭建博客 本地运行 常见报错及解决办法

    作为一名在hexo方面的新手,我在使用hexo编辑文档时遇到了很多问题,hexo generate编译的时候遇到了各种错误. 在此将这些错误及其解决方案记录下来,以便日后查证之用,同时,也可给各位在遇 ...

  8. 51nod 算法马拉松30

    题目链接 附一个代码地址 A,这个容斥一下就好了 C,rxd大爷给讲的,首先如果分三种情况(成环,正在比配环,未访问)讨论复杂度是\(3^n * n ^ 2\)的,但是对于每一个环,都可以直接枚举环的 ...

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

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

  10. JS 正则表达式基础

    1.元字符: 2.重复限定符 一些简单的正则表达式 (1)匹配8位数的QQ号码 ^\d{8}$ (2)匹配1开头的11位数手机号码 ^1\d{10}$ (3)匹配14-18位数的银行卡号 ^\d{14 ...