11.03
任务目标 // 进度:
工作结果:
学习笔记:
>>= //右移后赋值
<<= //左移后赋值
&= //按位与后赋值
^= //按位异或后赋值
|= //按位或后赋值
<< //左移
| //按位或(y)
int_inp(unsigned short port) //指定输入端口,读入
int_outp(unsiged short port,int databyte) //指定输出端口号,写出
int strcmp(const char *str1,const char *str2) //字符串比较
如果返回值小于0,则表示str1小于str2.
如果返回值大于0,则表示str1大于str2.
如果返回值等于0,则表示str1等于str2.
atoi(const char *str) //字符串转为整型
C++
-> 类成员访问运算符
int 整型
int* 指向整型的指针
int** 指向整型指针的指针
printf的格式控制的完整格式: % - 0 m.n l或h 格式字符 下面对组成格式说明的各项加以说明: ①%:表示格式说明的起始符号,不可缺少。 ②-:有-表示左对齐输出,如省略表示右对齐输出。 ③0:有0表示指定空位填0,如省略表示指定空位不填。 ④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型数的小数位数。为指定n时,隐含的精度为n=6位。 ⑤l或h:l对整型指long型,对实型指double型。h用于将整型的格式字符修正为short型。
%d 整型输出,%ld 长整型输出,
%o 以八进制数形式输出整数,
%x 以十六进制数形式输出整数,
%u 以十进制数输出unsigned型数据(无符号数)。
%c 用来输出一个字符,
%s 用来输出一个字符串,
%f 用来输出实数,以小数形式输出,
%e 以指数形式输出实数,
%g 根据大小自动选f格式或e格式,且不输出无意义的零。
%2x //2为输出宽度,不足补空
%02x //2为输出宽度,不足补0
%-2x //2为输出宽度,不足后面补0
%.2x //2为输出宽度,不足补0
%2.2x //2为输出宽度,2为输出精度
C++(预处理,counst, sizeof)
1.预处理
主要作用就是: 把通过预处理的内建功能对一个资源进行等价替换。
最常见的预处理有: 文件包含,条件编译、布局控制和宏替换4种。 文件包含: #include 是一种最为常见的预处理,主要是做为文件的引用组合源程序正文。 条件编译: #if,#ifndef,#ifdef,#endif,#undef等也是比较常见的预处理,主要是进行编译时进行有选择的挑选,注释掉一些指定的代码,以达到版本控制、防止对文件重复包含的功能。 布局控制: #progma,这也是我们应用预处理的一个重要方面,主要功能是为编译程序提供非常规的控制流信息。 宏替换: #define,这是最常见的用法,它可以定义符号常量、函数功能、重新命名、字符串的拼接等各种功能。
(1)简单的宏定义
#define <宏名> <字符串>
例: #define PI 3.1415926
(2) 带参数的宏定义
#define <宏名> (<参数表>) <宏体>
例: #define A(x) x
常见的预处理指令: #define 宏定义 #undef 取消宏 #include 文本包含 #ifdef 如果宏被定义就进行编译 #ifndef 如果宏未被定义就进行编译 #endif 结束编译块的控制 #if 表达式非零就对代码进行编译 #else 作为其他预处理的剩余选项进行编译 #elif 这是一种#else和#if的组合选项 #line 改变当前的行数和文件名称 #error 输出一个错误信息 #pragma 为编译程序提供非常规的控制流信息
2.const
Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。
Const主要有几点优势:
保护功能:便于进行类型检查;可以保护被修饰的东西;为函数重载提供了一个参考
时空效率:相比宏常量的反复分配内存空间,const常量只分配一次内存空间;编译器将它们保存在符号表中,成为编译常量,没有了存储与读取的操作。
指针使用CONST
(1)指针本身是常量不可变
(char*) const pContent;
const (char*) pContent;
(2)指针所指向的内容是常量不可变
const (char) *pContent;
(char) const *pContent;
(3)两者都不可变
const char* const pContent;
(4)还有其中区别方法,沿着*号划一条线:
如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;(const在左—>内容常量)
如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。(const在右—>指针常量)
3.sizeof
sizeof不是函数,更像一个特殊的宏,它是在编译阶段求值的。
cout<<sizeof(int)<<endl; // 32位机上int长度为4 cout<<sizeof(1==2)<<endl; // == 操作符返回bool类型,相当于 cout<<sizeof(bool)<<endl; 在编译阶段已经被翻译为: cout<<4<<endl; cout<<1<<endl; 这里有个陷阱,看下面的程序:
int a = 0; cout<<sizeof(a=3)<<endl; cout<<a<<endl; 输出为什么是4,0而不是期望中的4,3???就在于sizeof在编译阶段处理的特性。由于sizeof不能被编译成机器码,所以sizeof作用范围内,也就是()里面的内容也不能被编译,而是被替换成类型。=操作符返回左操作数的类型,所以a=3相当于int,而代码也被替换为: int a = 0; cout<<4<<endl; cout<<a<<endl; sizeof有两种用法:
(1)sizeof(object)
也就是对对象使用sizeof,也可以写成sizeof object 的形式。
(2)sizeof(typename)
也就是对类型使用sizeof,注意这种情况下写成sizeof typename是非法的。
任何时候,加括号总是对的。
C语言句柄 handle
句柄就是一个指向指针的指针,充当一种索引的作用
C语言运算符优先级和结合性一览表
预处理、counst与sizeof
心情感悟:
|