C/C++中的一点点笔记(注意的点)
数据类型
- 两个整数相除 得到的还是整数;
只要有一个浮点数,结果就是浮点数
例如:
3 / 2 = 1;
3.0 / 2 = 1.5;
- 在C语言中在不同位置定义不同的int变量如果没有对其进行初始化其默认值是不同的:
定义全局int变量未初始化其值默认是0;
定义局部静态int变量未初始化其默认值是0;
定义全局结构体中int未初始化其值默认也是0;
定义局部非静态未初始化其默认值是不确定的;
定义局部结构体中int未初始化其值也是不确定的。
具体说明可参见下述截图
可以参见原博客:http://blog.youkuaiyun.com/east5683/article/details/22960573 - 变量定义在这个变量被调用的最近的地方。
- 各种数据类型的取值范围
总结如下:
类型 | 位数(字节数) | 有效数字 | 数值范围 |
---|---|---|---|
bool | 1个字节 | 0/1 | |
BOOL | 4个字节 | TRUE/FALSE/ERROR | |
char | 1个字节 | -128~127 | |
unsigned char | 1个字节 | 0~255 | |
short | 2个字节 | -32768~32767 | |
unsigned short | 2个字节 | 0~65535 | |
int | 4个字节 | -2147483648~2147483647 | |
unsigned int | 4个字节 | 0~4294967295 | |
long | 4个字节 | -2147483648~2147483647 | |
unsigned long | 4个字节 | 0~4294967295 | |
long long | 8个字节 | -9223372036854775808~9223372036854775807 | |
unsigned long long | 8个字节 | 0~18446744073709551615 | |
float | 32(4) | 6~7位 | -3.41038 ~ +3.41038 |
double | 64(8) | 15~16位 | -1.710-308 ~ 1.710308 |
long double | 96(12) | 18~19位 | -1.210-4932 ~ 1.2104932 |
指针 | 4个字节 |
- 关于整型溢出,以short为例:
short a = 32769;
输出会变成-32787
- 强制类型转换int的结果只保留整数部分,不是四舍五入。
int(3.14) = 3;
int(3.58) = 3;
- 整数相除也是只保留整数部分。
- 指定保留多少位有效数字或指定小数点后保留多少位的时候,是四舍五入的。
float a = 3.14;
printf("%.1f",a) //输出3.1
float a = 3.58;
printf("%.1f",a) //输出3.6
- 前缀标识进制、后缀标识类型。例如:
013 + 12 = 23
- 前缀什么都没有是十进制
- 0开头是八进制
- 0x开头是十六进制
- 字符在计算机中是以ASCII的形式存在的,转义字符特别留意。例如:
'\61'
这个字符是'1'
,'\x61'
这个字符是'a'
。
'\66'
这个表示某个字符的八进制'\x66'
表示f这个字符的十六进制
来看几道易错的例题
“abcdef”
占7字节,长度为6。分析:f后面有一个结束字符\0,也要算做一个字节
“abcdef\0ghij\0k”
占15字节,长度为6。分析:\0是结束字符,长度就到了\0前
"abc\101123"
占8字节,长度为7。分析:\101是一个字符,表示101的八进制数所代表的字符
"abc\1681123"
占10字节,长度为9。分析:\16是一个字符,8不符合八进制,所以不是\168是一个字符
"abc\012345"
占8字节,长度为7。分析:优先考虑是否为八进制数,再看是不是\0结束字符
-
- 12L : (long) - 12LL : (long long) - 12U : (unsigned int) - 12ULL : (unsigned long long) - 12 : (int)十进制正整数 - -12 : (int)十进制负整数 - 0x12 : (int)十六进制整数 - 012 : (int)八进制整数 - 3.14L : (long double) - 3.14F : (float) - 3.14 : (double) - 3. : (double) 3.0 - .34 : (double) 0.34 - 1.23E-2 : (double)1.23 * 10 ^ -2 = 0.0123 - 1e-6 : (double) 1*10^-6 = 0.000001 - '\n' : 换行符 - '\t' : 制表符 - '\'' : 单引号 ' - '\"' : 双引号 " - '\r' : 回车符 - '\a' : 响铃符
13. 数据一旦出现了,它的类型就定了(包括变量和字面值)
14. 浮点数无法精确存储(有浮点误差)
15. float仅能在6~7位数尽量保证精度,6位肯定能保证,7位保证一部分(这个位数是指几位的数不是小数点后的几位)
#include <stdio.h>
int main(void)
{
float a = 2.45;
float