马上大四了,在学期末学校一年一度的企业实训体验开始了。
其实现在已经接近尾声,只是把学到的东西整理一下,供各位君闲聊查看。
/**********这个是第一天的笔记*************************/
/*
一:程序的结构
工程 sln
文件 .c 文件包括:函数的定义 变量的定义
.h 文件包括:存放声明 类型的定义 宏定义
函数:
主函数
子函数
语句
单词 字母数字下划线 开头不能是数字
二:
数据类型 --->size 范围
分类:
1.基本类型
整形 有符号 无符号
实型
字符型 :unsigned char [全0~~~全1]
char [~~~0+全1] 1 0000000 当看到这种情况 1即看作符号位 又看作数字位
这里特别注意当溢出的时候:
/////////2016.05.26日修改////////////////////////////////
(当溢出的时候都是把最前面的1看做符号与数字)(这句话错误)
当溢出时,只有1000 0000 这种情况可以把开头的“1”,即看做符号位,又看做数字位。
其他情况都是只看做符号位:
例子如下:
在这个例子中,char型溢出了,但是输出确是-128
可以这样理解:这里的1既是符号位,又是数字位
当我打印129时,你猜会出现什么情况?
为啥是-127呢?
让我一点点分析:
129,用二进制表示为 1000 0001
可是这种表示在char,有符号中表示 -1 ,数字在计算机中都是以补码形式表示的,因此:
原串:1000 0001
取反:1111 1110
加一:1111 1111 转成十进制:-127
所以 130,转成以后是-126
131,转成以后是-125
…………
09:54补充 无符号类型unsigned char类型溢出处理办法:
8 bit的无符号类型unsigned char能表示0 至 255 之间的值,因此,如果你赋予了超过这个区间的值时,实际结果是该值对256取模所得的余数。
因此,当你把-1赋给8 bit大小的unsigned char时,所得的结果是255.
下边分析:
-1的二进制:1000 0001
取反 :1111 1110
加一 :1111 1111 -1的补码,转成无符号:255
255 % 256 余数 255
因此打印出255
更深层次的现在还分析不出来,看C++ Primer有感
上午09:34 于广州
可能有错误,有的话希望可以指正
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
常量:用一对单引号括起来的叫做字符常量 ‘1’
short int b = 0; 2Byte -2^15~~2^15-1
int c = 0; 4Byte -2^31~~2^31-1
long d = 0; 4Byte -2^31~~2^31-1
long long ll = 0;8Byte -2^63~~2^63-1
unsigned short int usi = 0U; 2Byte(0~~2^16-1)
unsigned int ui = 0U; 4Byte(0~~2^32-1)
unsigned long int uil = 0UL; 4Byte(0~~2^32-1)
unsigned long long int ulli = 0; 8Byte(0~~2^64-1)
float f = 0.F; 4Byte
double d = 0; 8Byte
long double ld = 0; 8Byte
2.构造类型
结构体
共同体结构
指针类型
空类型 void
二:常亮及变量
2_1
1、 变量要占据内存 内存的大小由“数据类型决定”
2、 变量的内存是有名字的,名字就是变量名
3、 变量的内存是可读可写的
2_2
1、常亮也是要占据内存的,内存的大小由数据类型决定
2、常亮的内存是只读的,不可以写
3、字符串常亮是用双引号引起来的字符
然而:“ China"长度是0 但是占据了7个字节的内存
字符串的长度:从左到右计数,遇到第一个' '截止
字符串的尺寸:字符串占据的字节数
“China”5个长度 6个字节
" usa" 0个长度 5个字节
4、字符常亮 用单引号引起来的一个字符 'a' 'b'
分类:'
' ' ' 字符转义
'ddd' 'xff' 数值转义
小细节:'ddd' (0~~~377) 不会是777 已经超出
'ff' (x0~~~xff)
" 12345abc" 占用字节数8个
长度是7个
"378"已经超出 所以 3个/2个
x0abcd = x0a b c d
三:函数
作用域:名字的使用范围
在同一个作用域内不能出现相同的标示符
名字只能在作用域内使用
作用域采用就近原则
作用域的分类
1、文件作用域
2、函数作用域
3、语句块作用域
int g_count = 0; global的意思
int g_foo = 0;
nCount = 0;
nFir = 0;
3_4 作用域扩展
只能扩展文件作用域内的名字 不能扩展作用域之外的名字
局部作用域不能扩展
静态变量在编译时确定执行
3_5 递归调用 自己调用自己
要写好终止条件 终止条件放在递归之前
递归会频繁开辟释放内存,影响效率
3_6 字符串存放的是首字母地址 不管作参数还是变量
char str[] = "I Love You";//两个字符串,一个在数组中 一个在常亮中 地址不一样
char *p = "You Love me";//只读,不可写