(创建于2017/8/14)
1.float型变量a只能接受7位有效数字,因此最后三位是不准确的,但double型数字是可以全部接受10位有效数字的
2.常用转义字符:
\0 空字符 0
\t 水平制表,跳到下一个Tab位置 9
\r 回车,将当前位置移到本行的开头 13
\n 换行,将当前位置移到下一行的开头 10
' 双撇号 34),"" 单撇号 39
3.逗号运算符(逗号运算的结合性是从左至右,完毕之后整个表达式的值是最后一个表达式的值。)
#include<stdio.h>
int main(){
int m=1,n=2;
int a;
a=(m+n,m-n);
printf("a的值为%d,表达式的值为%d\n",a,a=(m+n,m-n));
a=m+n,m-n;
printf("a的值为%d,表达式的值为%d\n",a,(a=m+n,m-n));
a=m+n,m-n+a;
printf("a的值为%d,表达式的值为%d\n",a,(a=m+n,m-n+a));
printf("");
return 0;
}
运行结果
a的值为-1,表达式的值为-1
a的值为3,表达式的值为-1
a的值为3,表达式的值为2
4.强制类型转换
对变量进行强制类型转换时,只能得到一个中间值,并不改变该变量原有的类型。
5.自增运算和自减运算(++/-- 同java)
自增运算符和自减运算符是c语言特有的单目运算符,他们只能和一个单独的变量组成表达式。
x++和++x的相同之处是:单独作为一个表达式语句被使用时,无论执行了哪一种表达式,执行结束后x的值都加1.
x++和++x的不同之处是:当他们出现在其他表达式中时,也就是说作为其他表达式的一部分时,两个表达式的结果是不一样的。++x的值等于原值+1,x++的值等于x的原值。
6.位运算
#include<stdio.h>
// 运行结果如下:(分别为取反,与,或,异或,右移与左移)
int main(){
unsigned int A=0xb3,B=0x9a;
printf("A=%x\n", A);
printf("B=%x\n", B);
printf("~A=%x\n",~A);
printf("A&B=%x\n",A&B);
printf("A|B=%x\n",A|B);
printf("A^B=%x\n",A^B);
A=27;B=28;
printf("A<<1=%u\n",A<<1);
printf("A>>1=%u\n",B>>1);
return 0;
}
运行结果:
A=b3
B=9a
~A=ffffff4c
A&B=92
A|B=bb
A^B=29
A<<1=54
A>>1=14
数据类型
7.有符号数和无符号数的区别
有符号,最高位是符号位,1代表负数,0代表正数
无符号,最高位不是符号位,是数的一部分,无符号不可能是负数
8.char数据类型范围
char 占一个字节
有符号:-128~127
无符号:0~255
9.数值越界
char a = 127 + 2;
打印a的值为-127,从补码的角度分析
127+2 = 129 ,129转换为2进制是10000001,计算机是以补码存储数据的,所以这个2进制数是129的补码
补码:1000 0001
反码:1111 1110
原码:1111 1111(最高位是符号为) = -127
unsigned char b = 255 + 2;
257转换位二进制0001 0000 0001
因为是无符号数,所以只取后8位,得到的是1
10.sizeof
sizeof不是函数,只是一个运算符,所以不需要包含任何头文件,它的功能是计算一个数据类型的大小,单位位字节
sizeof的返回值位size_t
size_t类型在32位操作系统下是unsigned int,是一个无符号整数
11.整型变量输入输出
short 短整型 占2个字节
int 整型 占4个字节
long 长整形 windows 占4个字节 Linux占4个字节(32位),8个
字节(64位)
long long 8个字节
整型数据在内存中占用的字节数与所选的操作系统有关,虽然C语
言标准中没有明确规定整型数据的长度,但是long类型整数的长度
不能短于int,short类型的长度不能长于int
当一个小的数据类型赋值给一个大的数据类型,不会出错,因为编
译器会自动转换,但是当一个大的数据类型赋值给一个小的数据类
型,可能会丢失高位
打印格式 含义
%d 输出一个有符号的十进制int类型
%o(字母o) 输出8进制int类型
%x 输出16进制int类型,字母小写
%X 输出16进制int类型,字母大写
%u 输出10进制无符号数
12.字符型
字符变量实际上并不是把该字符本身放到变量的内存单元中去,而
是将该字符对应的ADCII编码放到变量的存储单元中,char的本质就
是一个字节大小的整型,内存中没有字符,只有数字,一个数字对
应一个字符,这种规则就是ASCII,使用字符或数字给字符变量赋值
是一样的
char ch = 'a' char ch = 97 等价
小写字母比大小字母的字节大32
小写转大写 'a'-32
大写转小写 'A'+32
13.转义字符
char a = 'abc' //原则上''内部只有一个字符,转移字符除外,这种写法不合适,会有警报
转义字符,由反斜杠组成的多个字符"\"
14.浮点型:float double
实型变量也称为浮点型变量,存储小数数值
单精度浮点数float: 占用空间4个字节,有效存储7位
双精度浮点型:占用8个字节,有效存储15~16
默认是double,加上f结尾是float,3.14是double类型,3.14f是float
15.类型限定符
extern : 声明一个变量,extern生命的变量没有建立存储空间 extern int a
const : 定义一个常量,值不能修改
volatile :放置编译器优化代码
register : 定义寄存器变量,提高效率,register是建议型的指令,而
不是命令型的指令,如果CPU由空闲寄存器,那么register就生效,
如果没有空闲寄存器,就无效