【C++】C++中的基本内置类型
基本数据类型
下面这张表是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++中的基本内置类型的更多相关文章
- 介绍Python中6个序列的内置类型
1.Python中6个序列的内置类型分别是什么? Python包含6中内建的序列,即列表.元组.字符串.Unicode字符串.buffer对象和 xrange 对象.序列通用的操作包括:索引.长度.组 ...
- C++内置类型如何存放于计算机内存中
摘要:内置类型的机器实现.字/字节/比特.内存 一.概念 计算机以比特序列存储数据,每个比特非0即1,如:00011011011100010110010000111011... 二.计算机以块来处理内 ...
- C++ x86程序与x64程序中,各种内置类型的大小比较
代码: #include <iostream> #include <cstdio> #include <list> #include <string> ...
- Python3中内置类型bytes和str用法及byte和string之间各种编码转换,python--列表,元组,字符串互相转换
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 python--列表,元组,字符串互相转换 列表,元组和字符串python中有三个内建函数:,他们之间的互相转换 ...
- python中6个序列的内置类型分别是什么,列表和元组的异同有哪些
1.Python中6个序列的内置类型分别是什么? Python包含6中内建的序列,即列表.元组.字符串.Unicode字符串.buffer对象和 xrange 对象.序列通用的操作包括:索引.长度.组 ...
- dart系列之:dart语言中的内置类型
目录 简介 Null 数字 字符串 布尔值 列表 set和map 简介 和所有的编程语言一样,dart有他内置的语言类型,这些内置类型都继承自Object,当然这些内置类型是dart语言的基础,只有掌 ...
- JavaScript备忘录(1)——内置类型
JavaScript有一些内置类型,还有很多常用的内置的方法,本文稍作总结,以备查阅. 值类型 我的理解,值类型是分配在栈上的,而引用类型(当然也包括引用类型内部的值类型)是分配在堆上的.值类型是不可 ...
- Python——内置类型
Python定义了丰富的数据类型,包括: 数值型:int, float, complex 序列:(iterable) str, unicode, tuple, list, bytearray, buf ...
- C++内置类型对象之间的转换
C++定义了一组内置类型对象之间的标准转换,在必要时它们被编译器隐式地应用到对象上. 隐式类型转换发生在下列这些典型情况下. 1. 在混合类型的算数表达式中 规则:在这种情况下最宽的数据类型成为目标转 ...
随机推荐
- To the Max POJ - 1050 (最大子段和)
Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous s ...
- 从零搭建 ES 搜索服务(四)拼音搜索
一.前言 上篇介绍了 ES 的同义词搜索,使我们的搜索更强大了,然而这还远远不够,在实际使用中还可能希望搜索「fanqie」能将包含「番茄」的结果也罗列出来,这就涉及到拼音搜索了,本篇将介绍如何具体实 ...
- Effective Java 第三版——59. 熟悉并使用Java类库
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...
- c#接口与抽象类的区别(一)
abstract 修饰符用于表示所修饰的类是不完整的,并且它只能用作基类.抽象类与非抽象类在以下方面是不同的: 抽象类不能直接实例化,并且对抽象类使用 new 运算符是编译时错误.虽然一些变量和值在编 ...
- 深入理解arguments.callee
在函数内部,有两个特殊的对象:arguments 和 this.其中, arguments 的主要用途是保存函数参数, 但这个对象还有一个名叫 callee 的属性,该属性是一个指针,指向拥有这个 a ...
- sql关于对一个字段同时满足多条件判断来筛选查询
表所有数据 查询userName为abc或xyz的 以下为本菜鸟项目中遇到的问题: 背景: /** * wangjie 180629 * * 学生需要查询四种可能的消息 * 1.班级管理员发 ...
- [MySQL] MySQL联表查询的执行顺序优化查询
SELECT t4.orgName, t3.projectName, t3.Partner, t1.type, COUNT(DISTINCT t1.imei) AS count FROM `t_tem ...
- centos下python安装与虚拟环境配置
Centos7下安装Python3.7 首先安装依赖包,centos里面是-devel,如果在ubuntu下安装则要改成-dev,依赖包缺一不可,笔者曾安装python3未成功就是因为没有安装libf ...
- React Native升级目标SDK
React Native升级目标SDK 打开在 android/app/的build.gradle 找到 android { } 区块 改变以下属性 compileSdkVersion 26 buil ...
- Spring使用原生JDBC
Spring使用原生JDBC 为加深对Spring解耦的理解,本次实验学习用Spring连接JDBC 一.POM配置文件 pom.xml <project xmlns="http:// ...