C++之数据类型

数据类型可以分为  基本数据类型  和  非基本数据类型

1.基本数据类型

     整型 (int),布尔值类型(bool),浮点数类型(double),字符类型(char), void类型。

2.非基本数据类型

     指针类型(type*),数组类型(type[]),引用类型(double&),数据结构(struct),类(class),枚举类型(enum)。

数据 可分为 常量 和 变量

1.1整数类型

    整数类型可以分为:

    short:占2个字节(32位,64位),分为short,unsigned short(无符号) ,signed short(有符号)。无符号可以只能表示非负整数,有符号即可以表示负整数也可以表示非负整数。无符号整数表示的正整数范围是有符号整数的2倍(整数类型都是这样)。不加修饰的short通常是表示有符号的。

    int :4字节(32位,64位),分为int,unsigned int(无符号) ,signed int(有符号)。不加修饰的int通常是表示有符号的。

    long  :4字节(32位),8字节(64字节),分为long  ,unsigned long  (无符号) ,signed long  (有符号)。不加修饰的long  通常是表示有符号的。

    long long:8字节(32位,64位),分为long long,unsigned long long(无符号) ,signed long long(有符号)。不加修饰的long long通常是表示有符号的。

  整数字面值常量:

     整数字面值常量分为:十进制,八进制,十六进制。

     以x或X(0x或0X)开头的字面值常量表示一个十六进制数值(基是16);以0开头但是后面没有x或X的字面值常量表示一个八进制数值(基是8);以0b开头的字面值常量便是一个二进制(基是2)

后缀U或u用于显式指定unsigned字面值常量,后缀L或l用于显式指定long字面值常量 ,后缀LL或ll用于显式指定long long字面值常量。比如

3是int  类型

3L是long int类型

3ULL是unsigned long long类型

1.2布尔值

     一个布尔变量(bool)的取值或者是true或者是false,布尔变量常用于表示逻辑运算的结果。

     字节大小(32位,64位):1字节,也就是8bit。

     取值范围:true,false。

     布尔值转换成整数时:true转为1,false转为0。

      整数转换成布尔值时:非0整数值对应true,0对应false。

      比如  

  int i = true;  //此时i被赋值为1    

  bool b1 = 7; //因为7不是0,所以 b被赋值为true

       在算术逻辑表达式和位逻辑表达式中,bool被自动转换成int进行运算,如果最终的计算结果需要转换成bool类型,那么就是非0为true,0为false。

比如

bool a = true;

bool b = false;

bool x = a  + b; //a+b的结果是2,因此x的最终取值是true

bool y = a - b;  //a-b的结果是0,因此x的最终取值是false

bool z = a||b;  //a||b的结果是1,因此x的最终取值是true   

       指针也能被隐式转换成bool。其中非空指针对应true,值为nullptr的指针对应false。

1.3浮点数据类型

    浮点数据类型分为 float(单精度),double(双精度),long double(扩展精度)。

    float:4字节(32位,64位)

    double:8字节(32位,64位)

    long double:8字节

浮点数字面值常量:

    默认情况下,浮点数字面值常量时double类型。

    浮点数字面值常量内部不允许出现空格,例如65.43 e-21不是一个浮点数字面值常量。

    定义一个float类型的浮点数字面值常量,则后缀加上f或者F:3.14159265f ,2.0f ,2.9e-3f

    定义一个long double类型的浮点数字面值常量,则后缀加上l或者L:3.14159265f L,2.0fL,2.9e-3L

1.4字符类型

     常用的字符集(比如不同自然语言的字符集:英文,中文,阿拉伯语...)和  字符编码方式(utf-8,gbk,gb2312....)有很多。为了反映和描述这种多样性,c++提供了一系列字符类型:

   char:默认的字符类型,用于程序文本。char是c++实现所用的字符集,占1字节(32位和64位),取值范围 -128~127。

   signed char(有符号):与char类似   带符号,既可以存放正值,也可以存放负值,取值范围:-127~127。

   unsigned char(无符号):与char类似  但是不带符号  取值范围:0~255。

   wchar_t(宽字符):用于存放Unicode等更大的字符集。unicode编码的字符一般以wchar_t类型存储。wchar_t数据类型一般为16位或32位,所能表示的字符数远超char型。(char是8位字符类型,最多只能包含256种字符,许多外文字符集所含的字符数目超过256个,char型无法表示。),比如对于汉字,韩文以及日文这样的字符,它们的每一个文字都占据两个字节。

    char16_t:该类型存放UTF-16等16位字符集。

    char32_t:该类型存放UTF-32等32位字符集。

一个char类型变量存放一个字符 ,字符的种类由实现版本所用的字符集决定。  

     比如

      char ch = 'a';

字符类型执行算术运算和位逻辑运算

      字符类型属于整型。因此,我们可以在字符类型上执行算术运算和位逻辑运算。

void digits()
{
    for(int i = 0; i!= 10;i++)
     {
        cout<<static_cast<char>('0'+i);//'0先转换成int类型和i进行运算,然后通过 
                                        //static_cast<char>' 将int类型转换成char
     }
}

字符字面值常量

    字符字面值常量:单引号内的一个字符,比如‘a’,'0'等。

    字符字面值常量的数据类型是char,它可以隐式地转换成当前机器所用的字符集中对应的整数值。例如,如果你的机器使用的是ASCII字符集,则‘0’的值是48。

    转义字符也是单字符,比如‘\n’,‘\t’,‘\d’等。

     我们可以把字符集中的字符表示成一个1-3位的八进制(\后面紧跟八进制数字)或者表示成16进制数(\x后紧跟十六进制数字)。其中,序列里十六进制数字的数量没有限制。如果遇到了第一个不是八进制数字或者十六进制数字的字符,则表明当前的八进制序列或者十六进制序列已经结束。

 

    上述规则使得我们不但可以设法表示出字符集中的每一个字符,而且能把这些字符嵌入到一个长字符串中。

    当我们在字符串中嵌入八进制数字常量时,常规的做法是使用3个数字,对于十六进制数字常量来说,我们使用两个数字。比如

char v1[] = "a\xah\129"; \\6个字符:‘a’ '\xa' 'h' '\12' '9' '\0'

char v2[] = "a\xah\127"; \\5个字符:‘a’ '\xa' 'h' '\127' '\0'

char v3[] =  "a\xad\127";\\4个字符:‘a’ '\xad' 'h' '\127' '\0'

char v4[] =  "a\xad\0127";\\4个字符:‘a’ '\xad' '\012' '7' '\0'

 标准C中的wprintf()函数以及标准C++的iostream类库中的类和对象能提供wchar_t宽字符类型的相关操作。

#include <iostream>
#include <locale>           //setlocale函数在locale头文件中定义
using namespace std;
int main()
{
	//使用setlocale函数将本机的语言设置为中文简体
	//LC_ALL表示设置所有的选项(包括金融货币、小数点,时间日期格式、语言字符串的使用习惯等),chs表示中文简体
	setlocale(LC_ALL, "chs");
	wchar_t wt[] = L"中国伟大复兴梦";   //大写字母L告诉编译器为"中"字分配两个字节的空间
	wcout << wt << endl;               //使用wcout来代替cout输出宽字符
	return 0;
}

如何定义常量

1.使用#define宏定义(define是一个记号,表示后面的数字,在编译时编译器会把记号简单地替换成数字)

    #define LENGTH 10

    #define  WIDTH  5

2.使用const常量关键字(const是声明了一个不可改变的变量并给其赋值)

const int LENGTH = 10;

const int WIDTH =  5;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值