CPL学习笔记(一)
整型
计算机的内存的基本单位是位(bit),可以将其看作电子开关,可以开,表示1;也可以关表示0。
字节(byte)通常指八位的内存单元。
8bit=1byte=1B;
1KB=1024B;
1M=1024KB;
1G=1024M;
1T=1024G;
如果在考场上忘记了数据类型的范围或字节数,莫着急,C++的特技<climits>就是为了解决此问题的。
常用函数:N_MAX,N_MIN.(N代表数据类型)
秒懂代码:
#include<iostream>
#include<cstdio>
#include<climits>
using namespace std;
int main()
{
int intmax=INT_MAX;
int intmin=INT_MIN;
long longmax=LONG_MAX;
long longmin=LONG_MIN;
short shortmax=SHRT_MAX;
short shortmin=SHRT_MIN;
long long llongmax=LLONG_MAX;
long long llongmin=LLONG_MIN;
printf("short is %d byte\n",sizeof(short));
printf("int is %d byte\n",sizeof(int));
printf("long is %d byte\n",sizeof(long));
printf("long long is %d byte\n",sizeof(long long));
printf("maximum:\n");
printf("short: %hd\n",shortmax);
printf("int: %d\n",intmax);
printf("long: %ld\n",longmax);
printf("long long: %lld\n",llongmax);
printf("minimum: \n");
printf("short: %hd\n",shortmin);
printf("int: %d\n",intmin);
printf("long: %ld\n",longmin);
printf("long long: %lld\n",llongmin);
return 0;
}
输出结果也是一目了然:
short is 2 byte
int is 4 byte
long is 4 byte
long long is 8 byte
maximum:
short: 32767
int: 2147483647
long: 2147483647
long long: 9223372036854775807
minimum:
short: -32768
int: -2147483648
long: -2147483648
long long: -9223372036854775808
--------------------------------
Process exited after 0.1151 seconds with return value 0
请按任意键继续. . .
该方法适用于所有整型。
值得一提的是,char也是整型的一种,CHAR_MAX=127;
这就提醒我们:char类型的加减法一定要小心,a的ASCLL码为97,也就是说两个值为‘a’的char类型相加就会出错。。。
FOR_EXAMPLE:
cout<<(char)('a'+'a');
我们也许会认为这行代码会输出ASCLL码为194的字符,其实不然,这句代码是错误的,它什么也不会输出。
有一种方法可以不完全的解决这个问题:unsigned char(范围0~255)
数据类型的溢出
int intmax=INT_MAX;
int intmin=INT_MAX;
cout<<intmax<<" "<<intmax+1;
cout<<intmin<<" "<<intmin-1;
return 0;
既然是数据类型的最大值,intmax+1应该不会大于2147483647,同理,intmin-1也应该不会小于-2147483648,不错,就是这样。
2147483647 -2147483648
-2147483648 2147483647
意想不到的是,intmax+1竟然=INT_MIN,这就是上溢现象。这种现象不好解释,但是一张图片就能将其描述清楚。
图片位置:C++ XXXX page 44.[手动滑稽]
整型字面值
C++能用三种不同的计数方式来书写整数,基数为10、基数为8、基数为16.
C++使用前一位或二位来标识数字常量的基数。
case 1:第一位为1~9,基数为10(十进制)。
case 2:第一位为0,第二位为1~7,基数为8(八进制)。
case 3: 前二位为0x或0X,则基数为16(十六进制)。
秒懂代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int decn=42;
int octn=042;
int hexn=0x42;
printf("042 八进制转十进制:%d\n",octn);
printf("42 十进制:%d\n",decn);
printf("0x42十六进制转十进制:%d\n",hexn);
return 0;
}
下附输出:
042 八进制转十进制:34
42 十进制:42
0x42十六进制转十进制:66
--------------------------------
Process exited after 0.0688 seconds with return value 0
请按任意键继续. . .
也就是说加上特殊标记后,我们可以直接存储十六/八进制数,但输出时默认转为十进制。如果我们希望直接输出十六/八进制数,该怎么办呢?
方法是有的,十六/八进制可是属于C++的计数方式,after all.于是乎,cout装备了一些C++的特技:
直接贴代码:
int n=15;
cout<<n<<endl;
cout<<oct;
cout<<n<<endl;
cout<<hex;
cout<<n<<endl;
cout<<dec;
cout<<n<<endl;
初学者也许会把oct、dec等当成忘记声明的变量(开始我就是这么认为),其实不然,它们分别代表十进制(dec)、八进制(oct)、十六进制(hex)。cout的默认输出格式为十进制,不难猜测,cout<<oct;就是将其输出格式改为八进制,hex也是同理。
输出:
15
17
f
15
--------------------------------
Process exited after 0.07195 seconds with return value 0
请按任意键继续. . .
n的数值自始至终并未发生改变,只是进制改变了。
C++如何确定常量的类型
举个栗子:
cout<<"Year = "<<1492<<endl;
这里的1492的类型将被存为什么呢?答案是:除非int类型不够大或者常量带有后缀,则存为int类型。
那么这里再介绍一下后缀:
u,表示此常量为unsigned int类型,如:1492u;
ul,表示此常量为unsigned long类型.等同于lu.
ull,表示此常量为unsigned long long类型.
ll,表示此常量为long long int类型.
对于不带后缀的十进制数,采用int,l,ll(按优先级顺序)
而对于不带后缀的十六/八进制数,采用int,u,l,ul,ll,ull.
转义序列
根据个人初步理解,转义序列的意义就是用‘\’加字符或数字表示一些特殊意义。
| 名称 | C++代码 | ASCII(dec) |
|---|---|---|
| 换行符 | \n | 10 |
| 水平制表符 | \t | 9 |
| 垂直制表符 | \v | 11 |
| 退格 | \b | 8 |
| 回车 | \r | 13 |
| 振铃 | \a | 7 |
提示:cout<<'\n'; 与 cout<<'\10'; 是等价的。即ASCII码可用于转义序列的表示。
通用字符名
格式为\u或\U开头,后加4(u)或8(U)位十六进制数。 这与一种叫Unicode的编码有关: https://baike.baidu.com/item/Unicode/750500?fr=aladdin <--------度娘在这里
如:
cout<<"\u4734"<<endl;
cout<<"\U000E34E4";
输出在这里:
錅
螅摛
--------------------------------
Process exited after 0.06648 seconds with return value 0
请按任意键继续. . .
这东西。。。高深!
符号常量——预处理器方式
#define INT_MAX 32777
这行代码我们并不陌生,学名:定义符号常量,#define & #include一样,也是预处理器编译指令。这是C语言遗留下来的定义方法,C++中的const其实已经在很多方面上代替了它。
int a=1; C语言的初始化方式
int a(1); C++的初始化方式
const 限定符
const int n=221024;
然后,n的值就无法进行修改了。
const int n;
n=10;
这是一种经典的错误,n开始被初始化成了一个不确定的值,而后面的n=10,也就无效了。
CPL学习笔记(一)的更多相关文章
- CPL学习笔记(二)
数组 数组(array) 声明通用格式为: typeName arrayName[arraySize]. arrayName指定元素数目,必须为整型常量或const值.(不能是变量) int a[3] ...
- AU3学习笔记
目录 1. AU3是什么?能做什么? 2. 乱学AU3中的命令(语言相关)? 3. 通过简单示例学习AU3? 4. 正则表达式的学习(对大小写敏感) 5.对于GUI的相关学习 1. AU ...
- xv6学习笔记(3):中断处理和系统调用
xv6学习笔记(3):中断处理和系统调用 1. tvinit函数 这个函数位于main函数内 表明了就是设置idt表 void tvinit(void) { int i; for(i = 0; i & ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
随机推荐
- LDAP理论知识
整理改编自: https://www.cnblogs.com/yjd_hycf_space/p/7994597.html http://blog.51cto.com/407711169/1439623 ...
- Python-15-收集参数
允许用户提供任意数量的参数: def print_params(*params): print(params) >>> print_params('Testing') ('Tes ...
- Java怎么把一个.log文件,以text文件方式打开,显示在桌面
总要有一个开始吧 群里面有一个哥们,问这个问题,索性记录下来, quextion: Java怎么把一个.log文件,以text文件方式打开,显示在桌面 anwser: 这里注意一个问题:拼接路径的时候 ...
- [Java]三大特性之封装
封装这个我们可以从字面上来理解,简单来说就是包装的意思,专业点就是信息隐藏. 是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可 ...
- HDU-1150-MachineSchedule(二分图匹配)
链接:https://vjudge.net/problem/HDU-1150#author=0 题意: 在一个工厂,有两台机器A,B生产产品.A机器有n种工作模式(模式0,模式1....模式n-1). ...
- 转 Oracle 11g Rman – 08317错误
在一次帮助客户解决归档满的过程中遭遇了此错误. 客户是新上线系统,11g版本.设置了归档清除脚本(脚本参考:http://www.ludatou.com/?p=766),结果发现以往没问题的脚本在此刻 ...
- 《C#高效编程》读书笔记01-使用属性而不是可访问的数据成员
在需求变更中,属性比数据成员更容易修改,例:客户对象不该与空白名称,若你使用公有属性封装Name,那么现在修改一处,而数据成员则可能要修改多处 public class Customer { priv ...
- MariaDB 实现主从复制
實驗目的: MariaDB為MySQL的一個分支,其完全開源.無版權之虞且操作上與 MySQL 一脈相承,實際應用中非常廣泛,軟件本身很小,安裝容易,使用簡單. 但其也有缺點,指令行方式操作,無原生G ...
- 初识Spinner
Spinner是个下拉列表框,与listview一样,也是adapterView的一个间接子类,是一个显示数据的窗口. <Spinner android:id="@+id/spinne ...
- Linux系统常用命令大全
一.系统信息操作(备注:红色标记为常用命令,以下类推,不再赘述) arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r ...