IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 2.1基本内置类型 - C++ primer 笔记 -> 正文阅读

[C++知识库]2.1基本内置类型 - C++ primer 笔记


基本内置类型包括算术类型(arithmetic type)和空类型(void)

算术类型

分类

分两类:整型(integral type,int bool char)和浮点型(float double)

尺寸

算术类型的尺寸(即该类型数据所占的比特数b)
c++标准规定了尺寸的最小值,同时允许编译器赋予这些类型更大的尺寸。
类型尺寸越大,他所能表示的数据范围越大
c++算术类型
用sizeof()获取类型的尺寸,单位是字节byte(1byte=8bit 1B=8b)。

bool a;
char b;
short c;
int d;
long e;
long long f;
float g;
double h;
long double i;

cout << "bool: " << sizeof(a) << endl;
cout << "char: " << sizeof(b) << endl;
cout << "short: " << sizeof(c) << endl;
cout << "int: " << sizeof(d) << endl;
cout << "long: " << sizeof(e) << endl;
cout << "long long: " << sizeof(f) << endl;
cout << "float: " << sizeof(g) << endl;
cout << "double: " << sizeof(h) << endl;
cout <<"long double: "<< sizeof(i) << endl;
//我的机器
bool: 1
char: 1
short: 2
int: 4
long: 4
long long: 8
float: 4
double: 8
long double: 8

bool :true false
char的大小与几个机器字节一样

带符号类型和无符号类型

除了布尔型和扩展的字符型,其他整型可以分为带符号signed的和无符号unsigned的两种。signed可以表示正数、负数、0;unsigned只能表示>=0的数。
int、short、long、long long 都是带符号的,前面加上unsigned就可以得到无符号类型。
unsigned int 可以缩写为 unsigned
字符char的表现形式只有两种:带符号和无符号。8bit的
unsigned char
可以表示0-255(可以用来表示灰度值),signed char可以表示-128 - 127的值。

字节byte 字word

大部分计算机以2的整数次幂( 2 n 2^n 2n)个bit 作为 来处理内存
cpu可寻址的最小内存块称为字节,存储的基本单元称为,字由几个字节组成。
计算机将内存中的每一个字节与一个数字(即地址 address)绑定在一起,当我们要用该字节中存储的内容时,cpu通过它的地址即可找到该内存(寻址),读取内存中存取的八位二进制(假使存的是01010101)。
同时cpu无法寻址更小的单元,比如这个字节的第一位的0,所以说字节是cpu可寻址的最小内存块
C++中,定义变量时,其实是在操作内存,变量类型表示要申请多大的内存块;给变量赋值时,是将变量的值写到内存中,当然要在代码运行起来的时候,这些操作才生效。

类型转换

基本类型转换

bool b = 42;			//b为true
int i = b;				//i的值为1
i = 3.1; 				//i的值为3
double pii = i;			//pii的值为3.0
unsigned char c = -1;	//假设char占8比特,c的值为255
signed char c2 = 256;	//假设char占8比特,c2的值是未定义的(我的机器是0)
signed char c3 = 255;	//假设char占8比特,-1
signed char c4 = 128;	//假设char占8比特,-128
cout << "sizeof(c):" << sizeof(c) << endl;
cout << "sizeof(c2):" << sizeof(c2) << endl;
sizeof(c):1
sizeof(c2):1

在这里插入图片描述
在这里插入图片描述

发现的问题

在这里插入图片描述
按照书上的说法,有符号与无符号的转换方式是有有差异,但是我发现用vs2015跑代码时,给signed char赋值255是能通过编译的,且也做了取余数的操作。我想应该是VS做了优化的。
换到Ubuntu试试!
环境 Ubuntu 18.04 gcc 7.5 cmake 3.10.0
CMakeLists.txt

# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)

# 设置gdb指令
SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

# 项目信息
project (Demo1)

# 指定生成目标
add_executable(Demo main.cpp)

在这里插入图片描述
make的时候,warning,不报错
在这里插入图片描述
可执行,正常输出

xrl@DESKTOP-CEH4EAH:~/cppcode/cppprimer/2$ ./Demo 
sizeof(c):1
sizeof(c2):1

重新编译

rm CMakeCache.txt
cmake -DCMAKE_BUILD_TYPE=Debug
make

GDB看一下,结果与VS2015的结果基本一致。具体有没有其他影响还不清楚

(gdb) p c
$2 = 255 '\377'
(gdb) p c2
$3 = 0 '\000'
(gdb) p c3
$4 = -1 '\377'
(gdb) p c4
$5 = -128 '\200'
(gdb) 

[1]: c++ primer

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-04 19:21:28  更:2021-07-04 19:21:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 12:19:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码