Chapter 2 Data Types and Arithmetic Operators

Integer numbers

int是我们非常常用的整数类型

我们要注意,变量在声明之后最好要初始化,否则里面存放的数据全是垃圾数据

Pasted image 20240925141709.png

Different integer types

我们先看下int存放数据的结构

signed and unsugned

Pasted image 20240925141834.png

如果是符号类型的int,他的第一位是一个符号位置,因此最大的就是0后面+31个1。因此表示$$2^{31}-1$$
超过这个就不可以了,但是无符号的就能从0开始一直到如图中展示。

当不考虑范围的时候,运算结果很可能超出表示范围进而产生overflow

Pasted image 20240925142620.png

Different Data Types for Integer

Pasted image 20240925142719.png
这个表格详细列出来了不同的integer类型可以参考。

sizeof

sizeof operator can return the width in bytes.

Warning

It is an operator, not a function!

因为有的时候你可以把int这种类型也放进去,如果是函数只能放进变量。
Pasted image 20240925142921.png

More Integer Types

char

Pasted image 20240925144011.png

Warning

标准没有规定char是signed还是unsigned

Pasted image 20240925144338.png
汉字很多没法用ascii编码,采用更多位数来编码,上面u小写是转换char16_t,下面的U大写转换同理。

bool

Warning

1.A C++ keyword, but not a C keyword
2.bool width: 1 byte (8 bits), NOT 1 bit!
3.Value: true (1) or false (0)

Pasted image 20240925144717.png
只要不是0就全是1!

在c语言中的bool一般采用typedef的方式,或者导入stdbool.h
Pasted image 20240925144813.png

size_t

实际上,size_t是个无符号整型(不能存放负数),它并不是一个全新的数据类型,更不是一个关键字。size_t是由typedef定义而来的,我们在很多标准库头文件中都能发现。

size_t的含义是_size type_,是一种计数类型。取值范围与机器架构与操作系统相关。32 位机器一般是unsigned int,占 4 字节;而 64 位机器一般是unsigned long,占 8 字节。

size_t类型隐含着本机理论所能容纳建立最大对象的字节数大小的含义,因此常被用于数组索引、内存管理函数中。

fixed width integer types

Pasted image 20240925145820.png
左侧type开头的u是无符号的。

右边是提供的一些macros定义,表达一定位数的数值的最大最小。

Floating-point numbers

看这个链接,ppt讲的不是很清楚。
Pasted image 20240925150414.png

Pasted image 20240925150329.png

Pasted image 20240925150322.png

Constant numbers and constant variables

常量也是有类型的类型。

把一个常量赋值给已经设定好类型的变量时,如果常量的类型与变量的类型不一致,编译器会进行类型转换
Pasted image 20240925150718.png

  1. 整数常量:

    • 95 是十进制整数,默认为 int 类型。
    • 0137 是八进制数,前缀 0 表示八进制,编译器会把它当作整数处理。
    • 0x5F 是十六进制数,前缀 0x 表示十六进制,表示整数。
  2. 浮点数常量:

    • 3.14159 是一个浮点数,默认为 double
    • 6.02e23 使用科学记数法表示浮点数。
    • 6.02e23f 表示 float 类型(通过后缀 f 确定类型)。
    • 6.02e23L 表示 long double 类型(通过后缀 L 确定类型)。
  3. 整数类型后缀:

    • 95u 表示 unsigned int(通过后缀 u 来定义)。
    • 95l 表示 long(通过后缀 l 来定义)。
    • 95ul95lu 表示 unsigned long(通过组合后缀 ullu 来定义)。
Warning

定义好的const不可以改变

Pasted image 20240925151551.png

auto

Pasted image 20240925151734.png

Arithmetic operators

Pasted image 20240925152010.png

int a = 5;
int b = -a;  // b 等于 -5

Pasted image 20240925152607.png
红线是先赋值给b再++
绿线是先++再赋值给b

Special notes

数据类型的转换

Pasted image 20240925152819.png

数据损失

Pasted image 20240925152955.png

除法

Pasted image 20240925153215.png
17是一个常量类型int的,5也是,因此两者算完了就是3,强制转换为float.

但是第二个是float类型的除法,因此可以

Distinct Operations for Different Types

Pasted image 20240925153340.png
+法做的是int类型,因此a和b全部转换成int类型,有32位,因此加完了是256不是0.

所有的全部转换成没有损失的类型,就是精度最高的类型。

Ref: https://en.cppreference.com/w/cpp/language/implicit_conversion