当前位置: 首页 > news >正文

C/C++的数据类型

 C++的数据类型

已使用的数据类型: 字符串类型, 整数类型

        什么是数据类型:现实社会中的人,分成很多”类型”,“物以类聚, 人以群分”,不同类型的人, 思考问题,处理问题的方式都不一样。计算机中的数据, 也分成很多类型:

int

unsigned  int

char

unsigned char

long

long long

unsigned long

short

unsigned short

float

double

各种指针类型

枚举类型

struct结构类型

union联合类型

bool

string

        C++ 完全支持C语言的各种数据类型。不同数据类型的区别:表示意义不同、占用内存不同、表示的范围不同、使用方法不同。数据类型使用不当,将导致严重的后果:对于程序员:隐藏BUG、对于系统:隐藏灾难

变量

        变量,不是数学中的变量,是内存中的一块存储空间,即一小块内存。。程序在运行时,需要保存很多内容常常变化的数据。一个程序运行时,大量数据存储在“变量”中。数据在大量变量之间“计算”、“交换”。变量是处理数据的基本实体。

变量和数据类型有什么关系?

        变量,是一个盒子,盒子里保存了“数据”,数据又分成很多“类型”(数据类型)。变量的类型,就是变量中数据的类型。变量在定义(创建)时,必须先指定它的类型。

        相当于:制作一个盒子时,必须先确认这个盒子是用来装什么的,1个变量只有1个类型,而且不能改成其他类型

变量的定义

定义形式1:int  x;  int  y;  

定义形式2:(不推荐)int  x,  y;

定义形式3:(定义的时候,设置一个初始值)(推荐)int  a = 100;

内存的存储单位,是字节。一个字节,包含8位二进制位。

变量名的命名规范

        只能包含3种字符(数字、大/小写字母,下划线);不能以数字开头(只能以字母或下划线开头);不能和“关键字”同名(c语言内部已经使用的“名称”),比如类型名int。

        变量名:最好“顾名思义”,不用使用汉语拼英的简写!比如:用name表示姓名,用power表示功率。

命名风格:

1)下划线风格:    int   student_age;  (一般用于变量名、函数名)

2)小驼峰风格        int   studentAge;  (一般用于变量名、函数名)

3)大驼峰风格        class  StudentAge;  (一般用于“类名”)

4)全部大写 (一般用于宏)        #define  MAX_AGE  30  

请忘记“匈牙利命名法”(属性+类型+对象描述)

int类型

int类型使用最多的整数类型,在内存中占4个字节,表示范围:-(2的31次方) 2的31次方-1  【正负21亿左右】

长整形long

long 也就是  long  int,可用来存储更大的整数。在32位系统上,占4个字节,和int相同。在64位系统上,占8个字节【正负9百亿亿左右】

长长整形long  long

用来存储整数。在内存中占8字节。很少使用,仅用于特殊的计算。

短整形short

用来存储整数。在内存中占2字节。用于存储小范围的整数。表示范围:- (2的15次方)  ~  2的15次方-1  【正负3万多】

无符号类型

没有负数。unsigned int、unsigned long、unsigned long long、unsigned short。最小值都是0, 最大值是对应的有符号数的2倍。

经典用法:unsigned short  port; //用来表示网络通信的端口号(0-65535)

unsigned int num; //表示编号(0到四十多亿)

char单字符类型

单个字符:‘0’  ‘1’  ‘2’  ‘3’  ...... ‘9’、‘a’ ‘b’  ‘c’  ‘d’  ...... ‘z’、‘A’  ‘B’  ‘C’  ‘D’  ......‘Z’、‘,’   ‘-’   ‘!’  ‘#’   .......单个字符常量, 要求用‘’括起来

字符的实际表示:

        所有的字符,使用对应的ASCII值来存储。(因为计算机中只能存储0和1的组合)。ASCII码,使用1个字节(包含8个二进制位,即8个0和1的组合)。

        比如:’A’ , 用 0100 0001 来表示,就是65。‘B’, 用 0100 0010 来表示, 就是66

char name = ‘a’;等效于:char  name = 97;

        char类型的另一种用法:用来表示小范围的整数(-128 ~ 127),不过现在开发时,小范围的整数,也常常直接用int类型。

实例:int x = 0;        x = ‘a’ + 1; // 97 + 1

注意: 1 和 ‘1’的区别:int  x = 1;        char  y = ‘1’;  //49

float类型(单精度浮点类型)

        需要精确计算的数学、工程应用,用整数类型不合适。用来存储带小数部分的数据。在内存中占用4个字节。表示范围:-3.4*10^38~+3.4*10^38 (不需记忆)。

精度:最长7位有效数字(是指7位10进制位)。float  y = 1.123456789;//精度只能取值到 1.1234568, 在第7位(整数部分不算)是四舍五入后的值。

float类型的存储方式:

符号位:0代表正数,1代表负数。阶码: 指数+127。尾数 *  2 ^ (阶码-127)

转化过程:(了解)float  x = 13.625;

13.625 的转化:13.625,13 -> 1101

.625 -> .101

0.625 * 2 = 1.25    取整 1 ,剩下0.25

0.25 * 2 = 0.5   取整 0 , 剩下0.5

0.5 * 2 = 1 取整 1 ,剩下0

按顺序得到 101(直到小数部分为0)

13.625 => 1101.101

1101.101  小数点向左移动3位 =>  1.101101

(要求移动到整数部分只有1位)

所以,阶码 = 3 + 127 = 130

二进制形式为:10000010

移位后的小数部分是 .101101

尾数存储二进制的101101

实际存储为:

常量

字面常量

int类型字面常量:1, 2, 3, 100

long 类型字面常量:200L (或200l, 建议用大写字母L)。注意:使用vs编译时,默认都是win32平台,所以即使在64位系统中,long也只有4个字节

long long 类型字面常量:100000000000LL(一千亿,建议用大写字母LL)

char类型字面常量:’a’, ‘b’, ‘X’, ‘-’

float类型字面常量:3.14f

double类型字面常量: 3.0   3.14

16进制常量:

123 = 1x100 + 2x10 + 3x1;0x11 (相当于17);以0x作为前缀说明:16进制

10进制

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16进制

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

8进制常量

以0作为前缀,011(相当于9),说明:16进制和8进制,只是给程序员使用起来更方便,在计算机中,数据都存储为2进制。

字面常量的缺点:程序的可读性变差、代码的可维护性差。

符号常量

#define宏定义的符号常量

#define  MAX_AGE  35        //在编译的预处理阶段,直接把MAX_AGE替换为35

const修饰的符号常量

const int maxAge = 35;

maxAge = 30; //错误!编译失败

注意:const修饰的符号常量,又叫“只读变量”。本质上,是一个变量,只是被const限制。

字符串

字符串就是0个或多个“字符”组成的“有序”序列。

字符串长度指字符串包含的字符个数(不是指中文)。空字符串的长度是0。“”是空字符串常量,没有一个字符,长度是0。“ ”是空格字符串常量,包含1个空格,长度是1。

“god”  的字符串长度是 3,“我爱你” 的字符串长度不是3 ,是6或9(在某些编码中,一个汉字占用2个直接,有些编码中占3个字节)

“字面型”字符串常量,要求用“”扩起来。

printf("name=%s", "China");  //C语言方式输出字符串,%s用来匹配字符串

cout << “China”;   //C++方式输出字符串

字符串结束符

        在c语言中,为了便于存储字符串,要求在最后一个字符的后面存储一个0(一个字节)。这个0, 称为“字符串结束符”,常用 ‘\0’ 表示。

“China”  =>   ‘C’   ‘h’   ‘i’    ‘n’   ‘a’    ‘\0’;        “” =>   ‘\0’

        在C++语言中,字符串的最后并没有字符串结束符!实际存储时,根据编译器的不同,最后可能存储一个字符串结束符,也可能没有。

字符串变量的表示

在C语言中,使用char类型的数组,来存储字符串变量。注:C语言中,没有专用的字符串类型。

在C++中,使用std::string类型来表示字符串变量。

string变量的定义、初始化
//定义了一个字符串变量,此时,该字符串是空字符串。
	string girlFriend1; 
	girlFriend1 = "王菲";  //把字符串常量"王菲"拷贝到girlFriend1
	cout << "girlFriend1 = " << girlFriend1 << endl;

	string girlFriend2; 
	girlFriend2 = girlFriend1; //把字符串变量girlFriend1的值拷贝到girlFriend2
	cout << "girlFriend2 = " << girlFriend2  << endl;

	//定义girlFriend3的同时,使用字符串常量"周迅"来初始化
	string girlFriend3("周迅"); 
	cout << "girlFriend3 = " << girlFriend3  << endl;

	//定义girlFriend4的同时,使用字符串变量来初始化
	string girlFriend4(girlFriend3); 
	cout << "girlFriend4 = " << girlFriend4  << endl;

	string girlFriend5(10, 'A');
	cout << "girlFriend5 = " << girlFriend5  << endl;
 string变量的输入、输出

使用std::cin >> 输入,从第一个非空白字开始,直到遇到空白字符时停止输入。空白字符是指:空格,制表符,回车符

使用std::cout  <<  输出

//demo1-基本的输入输出
string job;
cout << "你是做什么工作的?" << endl;
cin >> job;
cout << "做" <<  job << ",收入一定不错吧?" << endl;
//demo2-自动跳过空白字符
string university;  //大学
string profession; //专业
cout << "你是哪个学习毕业的?学什么专业? ";
// 输入:     清华     考古     hello
// 自动跳过空白字符
cin >> university >> profession;
cout << university << "的" << profession << "专业不错哦!"  << endl;
//demo3 -连续输入多个字符串,个数不确定

#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;
int main(void) {
string food; //专业
int i = 0;
cout <<  "你喜欢什么美食? ";
while (cin >> food) { //当用户输入 Ctrl + z 并回车 cin >> food返回0,  0就是假
i = i + 1;
cout << "你喜欢的第" << i << "美食是:" << food << endl ;
cout <<  "你还喜欢吃什么美食? ";
}
cout << "你最喜欢的美食有" << i << "种"  << endl;
system("pause");
return 0;
}
//demo4 - 读取一行getline
#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;
int main(void) {
string addr; //专业
cout << "你想到哪里去旅行:";
//从标准输入设备读取一行,但是不包括最后输入的回车符
getline(cin, addr);
//empty方法
if (addr.empty() == true) {
cout << "您输入了一个空行" << endl;
return 1;
}
//size()和length()完全等效
//长度是指字符串占用的字节数,如果含有汉字,那么总的字节数和汉字个数不同
cout << "地址的长度是:" << addr.size() << endl;
cout << "地址的长度是:" << addr.length() << endl;
system("pause");
return 0;
}
string字符串的比较

比较规则:和C语言相同。从字符串的第一个字符开始,对应字符逐个比较,直到遇到不相等的字符为止。比较运算符有:>   >=   <    <=   ==    。比较运算的结果:逻辑真,  逻辑假

“2”  >   “1999”   真        “123”  ==  “1230”   假              

#include <iostream>
#include <Windows.h>
#include <string>

using namespace std;

int main(void) {
string myGirl = "小芳";
string yourGirl;
cout << "我喜欢的女孩子是" << myGirl << endl;
cout << "你喜欢的女孩是:";
cin >> yourGirl;
if (myGirl == yourGirl) 
{
    cout << "我们喜欢同一人,过来决斗吧" << endl;
} 
else
{
    cout << "祝你幸福";
}
system("pause");
return 0;
}



注意:c语言的字符串,不能使用这个方式来进行字符串比较。

string字符串的加法

把+左侧的字符串,和+右侧的字符串,直接拼接成一个新的字符串。注意顺序。(C语言的字符串不支持该方式)

注意与数学中的“加法”不同:100 + 200  等于 300  ,“100” + “200” 等于 “100200”

#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;
int main(void) {
string s1 = "武当派";
string s2 = "张三丰";
string s4;
s4 = s1 + s2;  //武当派张三丰
cout << "s4=" << s4 << endl;
system("pause");
return 0;
}

C语言风格的字符串char数组

在c语言中,字符串是以“字符数组”存储的。

#include <iostream>
#include <Windows.h>
#include <stdio.h>

using namespace std;

int main(void) {
char name[32];    //C语言风格的字符串
/*
使用C语言的函数,来处理C语言字符串
printf("请输入您的名字:");
scanf("%s", name);        
printf("%s, 你好!\n", name);   
*/

// 使用C++的方式,来处理C语言字符串
cout << "请输入您的名字:";
cin >> name;
cout << name << ",你好!" << endl;
system("pause");
return 0;
}

相关文章:

  • 编程通用-配置文件的选择
  • Django从零搭建卖家中心登陆与注册实战
  • 为了四季度的盈利,李斌的换人还在继续
  • Java Stream深度解析 高阶技巧与性能优化实战
  • 高等数学同步测试卷 同济7版 试卷部分 上 做题记录 第三章微分中值定理与导数的应用同步测试卷 B 卷
  • C++中string库常用函数超详细解析与深度实践
  • Java数组初始化全解析:方式、场景与最佳实践
  • 嵌入式基础(二)ARM基础
  • 瑞幸微RK系列平台的YOLO部署(上篇)
  • Python学习笔记(列表)
  • 使用wpa_cli和wpa_supplicant配置Liunx开发板的wlan0无线网
  • idea的快捷键使用以及相关设置
  • mybatis--多对一处理/一对多处理
  • 数据库的种类及常见类型
  • L3-027 可怜的复杂度(纯暴力)
  • 供应链管理:供应链管理的边界
  • HTTP协议 --- 超文本传输协议 和 TCP --- 传输控制协议
  • 什么是端点日志监控
  • spark中,shuffle read和shuffle write的先后顺序是什么
  • 测试知识点总结
  • 最高法典型案例:学生在校受伤,学校并非必然担责
  • 富力地产:广州富力空港假日酒店第一次拍卖流拍,起拍价约2.77亿元
  • 今天是世界读书日,上海准备了哪些文化大餐?
  • 金发科技去年净利增160%,机器人等新领域催生材料新需求
  • 第三轮上海餐饮消费券本周五起报名,核销时间延长至6月2日
  • 新任遂宁市委副书记王忠诚已任市政府党组书记