Chapter03 第一节 简单变量
3.1 简单变量
定义一个变量后,系统根据变量类型的不同在内存的不同区域分配一个空间,将值复制到内存中,然后用户通过变量名访问这个空间。
3.1.1 变量名
变量名的命名规则:
- 只能使用字母、数字、下划线
- 第一个字符不能是数字
- 区分大小写
- 不能使用关键字
- 以两个下划线/下划线和大学字符开头的名称保留给实现使用,以一个下划线开头的名称保留给实现,用作全局标识符(c++程序的所有源文件可用)
- 部分环境对变量名长度有要求
3.1.2 & 3.1.3 整型以及其扩展
计算机的基本单位是bit(位),一个bit分为0/1两种状态,8bit能表示256种不同的状态。一个字节通常意义上由8bit组成。1KB=1024字节。
int、short、long、long long都表示整型,但是他们的位数不同,所以表示的数值的范围也就不同。不同的类型规定了不同的最小长度。具体如下:
- Short 16位
- int 16位
- long 32位
- long long 64位
不同位数的系统中,整型的长度不一样。主要区别在于long类型和指针类型。16位机器中,long占4字节,不支持longlong类型,指针为2个字节。32位机器中,long占4字节,longlong占8个字节,指针占4个字节。64位系统中,long占8个字节,longlong8个字节,指针8个字节。
// lismits.cpp
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n_8_int = INT8_MAX;
int n_16_int = INT16_MAX;
int n_32_int = INT32_MAX;
int n_64_int = INT64_MAX;
int n_int = INT_MAX;
short n_short = SHRT_MAX;
cout << "int 在不同机器上的大小:" << endl;
cout << "8位" << n_8_int << endl;
cout << "16位" << n_16_int << endl;
cout << "32位" << n_32_int << endl;
cout << "64位" << n_64_int << endl;
cout << "本机" << n_int << endl;
return 0;
}
其余类型在自己机器中的最大最小长度查看limits.h

上图中用到了大量的#define指令。define是一个预编译指令,它在预编译阶段使用类似于查找替换的方式,将代码中的所同名的变量替换为具体的值。这是C语言的遗留方法。#define在C++标准中不推荐使用,它的优缺点如下:
优点:
- 方便修改,一次修改全部改变
- 提高运行效率 在define中写一些简短的函数
缺点:- 没有类型检查,这个是致命伤,C++中推荐使用Const
- 括号边界问题,直接替换容易报错。如
#define MUL(a,b) a*b,代码中的MUL(a+b,c)就会变成a+b*c,因为是直接替换。- 函数边界问题。上面的问题在函数中也会出现,应该使用inline内联函数来代替#define。内联函数以牺牲空间的方法,来继承#define的有点,它采用传参的方式使用函数,有类型检查来保证程序的安全。可以进行调试,可以访问类中成员。内联函数要求必须要小,程序自动判断是否能作为内联函数调用,如果不能就当作普通函数调用。 内联函数一般只有几行代码,且不能有递归。
初始化的方式:
* int a = 10;
* int a(10); 下面是C++专属
* int a = {10};
* int a{10}
* int a = {} //默认初始化为0
还可以先声明,再在使用的时候赋值。先声明不赋值的话系统会自动赋值,然而为了避免莫名奇妙的Bug和浪费空间,还是声明的时候赋值比较好。
3.1.4 无符号类型
可以将整型类型的大小范围看作是一个首尾相连的圈。对于short类型,范围是-32768~32767。如果a=32767,那么a+1 = -32768,此时,short类型溢出了。
将符号定义为unsigned short后,因为是无符号类型,范围变为0~6553。所以如果b = 0,则b-1 = 65535,同样溢出。 如何定义你的整型类型要看你的需求和程序执行过程中这个变量的影响范围。定义成无符号型在特定情况下既能省内存,又不会溢出。

3.1.5
3.1.6 各类进制
//hexoct.cpp
#include <bits/stdc++.h>
using namespace std;
void change_to_binary(int);
int main()
{
int a = 42;
int b = 0x42;
int c = 042;
cout << "十进制的 42:" << a << endl;
cout << "十六进制的 0x42:" << b << endl;
cout << "八进制的 042:" << c << endl;
int d = 42;
cout << "42转十六进制: " << hex << d << endl;
cout << "42转8进制: " << oct << d << endl;
char buff[20] = "1239271";
char *stop;
cout << "转化为八进制结果: " << strtol(buff, &stop, 8) << endl;
cout << "转化为十六进制结果: " << strtol(buff, &stop, 16) << endl;
int num = 99;
char str[100];
itoa(99, str, 8);
cout << "99转化为八进制" << str << endl;
itoa(99, str, 16);
cout << "99转化为十六进制" << str << endl;
change_to_binary(10);
return 0;
}
void change_to_binary(int value)
{
for (int i = 32; i >= 0; i--)
{
if (value & (1 << i))
cout << "1";
else
{
cout << "0";
}
}
cout << endl;
}
十六进制和八进制可以直接用十进制输出,cout自动识别并转换。
反过来,十进制转换为十六进制或十进制使用控制符hex、oct,通过控制符来告诉cout类按照什么方式输出。
转换方法:
1.使用库函数
itoa和strtol2.使用
hex、oct控制符3.使用位运算(二进制)
3.1.7 C++如何自动确定常量的类型
除非有其他特殊的理由,如值太大、类型通过后缀指定了等,否则一律默认存储为int类型。
- 后缀:
- U/u表示unsigned类型
- L/l表示long类型
- ul表示unsigned long类型
- LL/ll表示long long 类型
- (其他还有多种组合。。。。。。以此类推)
- 值的大小:
- 每个类型都有固定的范围,超过范围就存为更大范围的类型
3.1.8 char类型
- char类型也是一种整型,然而他存的是数字和字母。根据ASCII表,char存字母时,实际上存的是字母对应的数字编码。(除了ASCII表,还有其他对应的编码标准)
#include <bits/stdc++.h>
using namespace std;
int main()
{
char ch = 'M';
int i = ch;
cout << ch << "的ASCII编码是" << i << endl;
ch = ch + 1;
i = ch;
cout << "+1之后的编码是" << i << ",字母是" << ch << endl;
cout << "使用cout.put()函数:" << endl;
cout.put(ch);
cout.put('!');
return 0;
// 变量ch的值为M,存入的是其数字编码77,`ch+1`就是77+1,输出的就是78对应的字母N。
}
转义字符:有一些字符无法通过键盘输入到cout中,如回车、制表等,还有些会被识别为代码,如“”等,此时就需要用转义字符。

char类型可以是无符号,也可以是有符号
char ch这个可以是有符号也可以是无符号unsigned char ch无符号signed char ch有符号
wcha_t: 宽体char
wcha_t bob = L'p'char16_t / char32_t 长为16/32位的字符类型
3.1.9 bool类型
显示赋值: true / false、
隐式赋值: 非0值为true,0为false
Chapter03 第一节 简单变量的更多相关文章
- c语言第一章第一节 认识变量
声明:本人大一新生,闲着无聊..写写c语言教程..菜鸟一枚..大神勿喷!!! 接下来我们都用dev来进行编译..vc++太古老了,没提示功能,不好上手,并且老是出毛病..vs太大了,编个c不至于,运行 ...
- python第一节:变量及数据类型
一.变量 1.什么是变量 变:即为变化的事物 量:即为事物当前的状态 2.为什么用变量 变量可以方便的记录事物当前状态,在后面随时可以调出使用 3.怎么用变量 变量使用前需要先进行赋值(记录状态) 赋 ...
- 第一节 简单的jsp实例
1.打开Eclipse,依次点击“File” .“New” .“Other” ,选择生成动态Web项目. 2.输入项目名字,点击Finish 生成项目结构如下: 3.在WebContent目录上,单击 ...
- 第四章 跨平台图像显示库——SDL 第一节 与SDL第一次亲密接触
http://blog.csdn.net/visioncat/article/details/1596576 GCC for Win32 开发环境介绍(5) 第四章 跨平台图像显示库——SDL 第一节 ...
- 第一节,初识OpenCV3-图像的读、写、显、格式转化等
之前一直在看深度学习,突然用到了对图像处理的东西,所以过来补充一下OpenCV基础. 就顺便从网上了买了一本OpenCV 3计算机视觉这本书,这本书比较薄,但是目前已经够我用了,在这里就记录一下我的学 ...
- 第一节,TensorFlow基本用法
一 TensorFlow安装 TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tsnsor(张量)意味着N维数组,Flow(流)意味着基 ...
- 基本教程篇--第一节:InitialSampleDemo.cs介绍
第一节:InitialSampleDemo.cs介绍 为了讲解方便,我先附上源代码和效果图. 代码如下: using System; using System.Drawing; ...
- Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G
code&monkey Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...
- 程序演示:C语言第一个简单实例
在信息化.智能化的世界里,可能很早很早 我们就听过许多IT类的名词,C语言也在其中,我们侃侃而谈,到底C程序是什么样子?让我们先看简单的一个例子: 1 2 3 4 5 6 7 8 9 #include ...
随机推荐
- 如何修改wordpress博客默认管理员用户名称
打开你的WordPress数据库,点击结构后面的SQL,输入下面一段命令执行 UPDATE wp_users SET user_login = '新用户名', user_nicename = '新用户 ...
- 移动端布局基础viewport
划重点 手机屏幕相对着桌面浏览器小,传统网页的设计在手机上体验糟糕 Apple 在移动版 Safari 中定义了 viewport meta 标签(如果没记错最早提出的话),用于创建一个虚拟窗口(la ...
- mvn clean 后 mvn package失败
项目完全没有问题,就是mvn clean package 失败,或者打包成功后发布项目无法启动. 很可能的原因是,clean后一些需要编译生成的文件还没有生成,直接package会出错,或者packa ...
- css标签样式 边框 盒子模型 定位 溢出 z-index 透明度
目录 一.CSS设置标签样式 1. 给标签设置长和宽 2.字体的颜色(3种表示方法) 3.文本样式 4. 语义 5. 背景样式 6. 边框 6.1 边框变圆 7.display 标签转换 二.盒子模型 ...
- 好好理解一下python的函数和python的缩进
缩进相当于其他语言的括号,括号中的语句才是一起执行的 这一个函数的功能应该是计算平均分 所以d这个dict应该是作为参数传进来的,而不是写到函数内部 正确的写法 d = { 'Adam': 95, ' ...
- JAVA笔记23-IO流(1)
一.流的概念和分类 JAVA程序中,对于数据的输入.输出操作以“流”(stream)方式进行:J2SDK提供了各种各样的“流”类,用以获取不同种类的数据:程序中通过标准的方法输入或输出数据. java ...
- 【NOIP2016提高A组集训第13场11.11】最大匹配
题目 mhy12345学习了二分图匹配,二分图是一种特殊的图,其中的点可以分到两个集合中,使得相同的集合中的点两两没有连边. 图的"匹配"是指这个图的一个边集,里面的边两两不存在公 ...
- 算法复习-a 到 z不完全排列生成
在网上看到这个题,觉得很有意思,也算是一种方法...但是复杂度同样很高,生成全排列本身需要很大复杂度. 题目:现在有 a 到 z 26 个元素, 编写程序打印 a 到 z 中任取 3 个元素的组合(比 ...
- 关于 ATL 中 CComControl 的构造
分享一篇 C++语言 & ATL 的高阶解读笔记,你需要在C++语言特性中上串下跳,应该算篇有质量的文章. class ATL_NO_VTABLE CHello : // ... public ...
- 在MyEclipse安装Spket插件,用于jQuery代码提示
Spket插件下载: https://pan.baidu.com/s/1sjz24NF 解压文件,然后将解压后的文件全部复制到MyEclipse安装目录下的dropins包中,重启MyEclipse. ...