跳至主要內容

02. 数值类型+低占用类型

LincZero大约 5 分钟

02. 数值类型+低占用类型

基本类型 > 数字 > 整型、char、bool

简概

子类型与类型宽度(与C不同)

字长(注意short [int],long [int]简写)

C/C++
有符号类型
C/C++
无符号类型
宽度(C++标准表示法)
(确保最小长度)
8/16位平台
字节数
32位平台
字节数
64位平台
字节数
C++新增
[signed] charunsigned char至少1字节111
shortunsigned short至少2字节222
intunsigned至少2字节,且\geqshort244
longunsigned long至少4字节,且\geqint448
longlongunsigned long long至少8字节,且\geqlong——88
char *248
bool
——————————————————————
size_t48
int32_tuint32_t44
int64_tunint64_t88
wchat_t根据字符集而定根据字符集而定
——char16_t22
——char32_t44
————————
float至少4字节44
double至少6字节,且\geqfloat88
long double\geqdouble(10、12、16)

整型的子类型 - char补充(与C不同)

  • 分类依据:关于子类型加上charbool,因为:
    • char可以当整型用、只是一般是用来表示字符(ASCII)罢了
    • char可以用数字定义,而且也以数字存储数据
  • 符号
    • Java:char默认[signed] char,ASCII编码所在区域都在正数侧,占128个
    • C/C++:char在默认情况下即非无符号也非有符号,是否有符号由C++实现决定
  • 其他另类char类型
    • wchat_t
      • 对于有些字符集(如日文汉字系统)无法用char表示
      • 而wchar_t是一种整数类型,有足够的空间可以表示系统使用的最大扩展字符集
      • 输出使用wcinwcout
    • char16_tchar32_t(C++新增类型)
      • 类似于int32_tint64_t的存在

整型的子类型 - bool补充(与C不同)

  • 新增
    • ANSI/ISO C++标准后C++的新增类型,过去C++和C一样没有布尔类型,将非零值解释为true,将零解释为false
  • 转换
    • 所有数字值或指针值都可以被隐式转换(不用显式强制转换)为bool值
    • 任何非零值转换为true,零转换为false

使用

字面量方式

  • 按进制定义:与C相同,C++能使用前1~2位来标识数字常量的基数(进制数)

    • 十进制:第一位1~9
    • 八进制:第一位0,第二位1~7
    • 16进制:前两位0x或0X
  • 标明类型:和C一样通过后缀标明类型。在定义时意义不大,常用于不定义时直接使用数(用于选择存储常数的内存如何设置)

    • 显式标注(带后缀)

      • int:默认情况的存储,不需要额外标明
      • long:lL后缀(因为l看起来像数字,一般用L)
      • unsigned:uU后缀
      • 或者组合使用,如ulllull
    • 隐式判断(不带后缀)

      • 不标明会自动判断,如在16位平台上(INT_MAX=32767,LONG_MIN=2147483648):

        20000被表示为int,40000被表示为long,3000000000被表示为longlong

  • 字符定义

    • 使用单引号括起来,只能有一个字符
  • 字符转义

    • C++转义序列编码查表去,基本上编程语言的都差不多(进制转义可能有点区别),转义包括按进制转义(类似于整数的按进制定义)

符号操作

  • 算术运算符+、-、*、/、%,加减乘除取余,其中:
    • 除法运算符有三种运算:整数除法(默认为floor除法)、float除法、double除法(运算符重载)
    • 求模的操作数必须都是整型

内置函数操作 - 输出(与C不同)

C++的cout提供了控制符dec、hex、oct

  • 按进制输出:C++的cout提供了控制符dec、hex、oct

    • 十进制:cout << dec << n_int;,整型默认方法(char例外)

    • 八进制:cout << oct << n_int;

    • 16进制:cout << hex << n_int;

    • ASCII编码输出:cout << c_char;cout.put();后者是成员函数,为什么有cout.put();?历史缘故:

      在Release2.0之前cout能处理字符变量但无法正确处理字符常量(会自动保存成int类型,而现在可以正常处理了)

    • 注意:默认输出dec(char例外),进制转换的操作是永久性的,如果是临时用的话就要改回来!

基本类型 > 数字 > 浮点型

简概

子类型与类型宽度(3种)

浮点类型宽度(C++标准表示法)通常字节数
float至少4字节4
double至少6字节,且\geqfloat6
long double\geqdouble10、12、16

long double为多精度浮bai点类du型或长精度浮点类型

另外,这三种类型的指数范围至少是-37~37,可以从头文件cfloat或float.h中找到系统的限制

使用

字面量方式

  • 小数的两种表示法
    • 小数点方式:如:xx.xx
    • E表示法:如xxexx/xxe+xxxxe-xxxxExx/xxE+xxxxE-xx
  • 标明类型:和C一样通过后缀标明类型,在定义时意义不大,常用于不定义时直接使用数(用于选择存储常数的内存如何设置)
    • double:默认情况小数的存储,不需要额外标明
    • float:fF后缀
    • long doublw:lL后缀(因为l看起来像数字,一般用L)

符号操作

  • 算术运算符+、-、*、/、%,加减乘除取余,其中:
    • 除法运算符有三种运算:整数除法(默认为floor除法)、float除法、double除法(运算符重载)
    • 求模的操作数必须都是整型

内置函数操作 - 输出(与C不同)

  • 输出:通常cout会删除结尾的零,cout.setf()可以覆盖这种行为