一、信息的存储方式
1.计算机以8个连续的位(bit、比特)为一组,称为一个字节(B、byte)
1 Kb = 1024 byte
计算机中每个存储单元一般是一个字节,可存放8个二进制数
二、数据类型
(一)整数类型
1.C语言标准要求:(1)char < short <= int <= long
(2)char < short <= float <= double
2.计算数据类型长度(字节数):sizeof(...) (注意:sizeof属于运算符,不是函数)
3.32位系统各整型数据长度:
数据类型 | 字节数 | 比特数 | 取值范围 |
int | 4 | 32 | -231 ~ 231 - 1 |
short | 2 | 16 | -215 ~ 215 - 1 |
long | 4 | 32 | -231 ~ 231 - 1 |
char | 1 | 16 | -27 ~ 27 - 1 |
4.32位系统无符号整型数据长度:
数据类型 | 字节数 | 比特数 | 取值范围 |
unsigned int | 4 | 32 | 0 ~ 232 - 1 |
unsigned short | 2 | 16 | 0 ~ 216 - 1 |
unsigned long | 4 | 32 | 0 ~ 232 - 1 |
(长度等于同类型整型数据)
5.C99标准为C语言扩展了新的整数类型:long long
数据类型 | 字节数 | 比特数 | 取值范围 |
long long int | 4 | 32 | 0 ~ 232 - 1 |
unsigned long long | 2 | 16 | 0 ~ 216 - 1 |
(输入、输出均使用"%lld")
6.R进制:R称为数制的“基数”
数制中每个固定位置所对应的单位值称为“权”
快速计算:每一个八进制数相当于3位二进制数
每一个十六进制数相当于4位二进制数
7.有符号整数存储方式:补码
补码定义:正数补码即为其二进制形式
负数补码等于其绝对值的二进制形式,按位取反再加 1
规律:正数补码最高位是0,负数补码最高位是1
数据溢出:32767 + 1 == 32768
注:存储方式:原码:最高位为符号位,0代表正数,1代表负数
反码:正数不变,负数逐位取反
补码:正数不变,负数逐位取反再 + 1
采用补码的原因:方便进行运算,不必考虑符号位:(X + Y)补 == X补 + Y补 (X - Y)补 == X补 - Y补
(二)实数类型
1.32位系统各整型数据长度:
数据类型 | 字节数 | 比特数 | 取值范围 |
float | 4 | 32 | -10-38 ~1038 |
double | 8 | 64 | -10-308 ~10308 |
long double | 16 | 128 | -10-4932 ~104932 |
2.控制字符:
函数 | float | double | long double |
scanf | %f | %lf | %Lf |
printf | %f | %f | %Lf |
(%e、%g同理)
3.IEEE制定标准:
单精度:SE E...E FF...F 双精度:SEE...E F F...F
01......8 9....31 01....11 12....63
S:符号位 E:指数位 F:小数位
数值:(-1)S * 2E - 127 * (1.F)
(三)字符类型
1.双重属性:整数属性(可以使用unsigned修饰符),字符属性(‘A‘ = 65, ‘a‘ = 97)
小写 = 大写 + 32
三、常量
常量分为字面常量(直接常量),符号常量(定义:宏命令:#define PI 3.14)
(一)整型常量
1.以0开头表示它为八进制数
以0x开头表示它为十六进制数
(二)实型常量
1.如果小数点左边或右边为0,则此0可以省略(例:.124 == 0.124 124. = 124.0)
2.指数形式中,字母e可写为E,指数部分必须是一个整数
规范化形式:实数部分小数点左侧仅有1位非零数字
(三)字符常量
1.常用转义字符:
\a 响铃 \b 退格 \t 水平tab键 \? 问号 \n 换行 \\ 反斜杠 \v 竖直tab键
四、变量
1.命名规则:只能包含字母、数字、下划线
第一个字符必须是字母或下划线
不能使用关键字,变量名与大小写相关
变量命名法:(1)全小写,单词间加下划线(主要用于UNIX)
(2)骆驼命名法:第一个字母小写,以后每个单词第一个字母大写,例:myCar
(3)匈牙利命名法:变量名前加数据类型字符,例:整型变量:iMyCar(多用于Windows)
(4)帕斯卡命名法:首字母大写,例:UserName(常用于类的变量)
常量命名法:全大写,例:MAX_PARAMETER_COUNT
五、运算符和表达式
1.运算符优先性
优先级 |
运算符 |
名称或含义 |
使用形式 |
结合方向 |
说明 |
1 |
[] |
数组下标 |
数组名[常量表达式] |
左到右 |
|
() |
圆括号 |
(表达式)/函数名(形参表) |
|||
. |
成员选择(对象) |
对象.成员名 |
|||
-> |
成员选择(指针) |
对象指针->成员名 |
|||
2 |
- |
负号运算符 |
-表达式 |
右到左 |
单目运算符 |
(类型) |
强制类型转换 |
(数据类型)表达式 |
|||
++ |
自增运算符 |
++变量名/变量名++ |
单目运算符 |
||
-- |
自减运算符 |
--变量名/变量名-- |
单目运算符 |
||
* |
取值运算符 |
*指针变量 |
单目运算符 |
||
& |
取地址运算符 |
&变量名 |
单目运算符 |
||
! |
逻辑非运算符 |
!表达式 |
单目运算符 |
||
~ |
按位取反运算符 |
~表达式 |
单目运算符 |
||
sizeof |
长度运算符 |
sizeof(表达式) |
|||
3 |
/ |
除 |
表达式/表达式 |
左到右 |
双目运算符 |
* |
乘 |
表达式*表达式 |
双目运算符 |
||
% |
余数(取模) |
整型表达式/整型表达式 |
双目运算符 |
||
4 |
+ |
加 |
表达式+表达式 |
左到右 |
双目运算符 |
- |
减 |
表达式-表达式 |
双目运算符 |
||
5 |
<< |
左移 |
变量<<表达式 |
左到右 |
双目运算符 |
>> |
右移 |
变量>>表达式 |
双目运算符 |
||
6 |
> |
大于 |
表达式>表达式 |
左到右 |
双目运算符 |
>= |
大于等于 |
表达式>=表达式 |
双目运算符 |
||
< |
小于 |
表达式<表达式 |
双目运算符 |
||
<= |
小于等于 |
表达式<=表达式 |
双目运算符 |
||
7 |
== |
等于 |
表达式==表达式 |
左到右 |
双目运算符 |
!= |
不等于 |
表达式!= 表达式 |
双目运算符 |
||
8 |
& |
按位与 |
表达式&表达式 |
左到右 |
双目运算符 |
9 |
^ |
按位异或 |
表达式^表达式 |
左到右 |
双目运算符 |
10 |
| |
按位或 |
表达式|表达式 |
左到右 |
双目运算符 |
11 |
&& |
逻辑与 |
表达式&&表达式 |
左到右 |
双目运算符 |
12 |
|| |
逻辑或 |
表达式||表达式 |
左到右 |
双目运算符 |
13 |
?: |
条件运算符 |
表达式1? 表达式2: 表达式3 |
右到左 |
三目运算符 |
14 |
= |
赋值运算符 |
变量=表达式 |
右到左 |
|
/= |
除后赋值 |
变量/=表达式 |
|||
*= |
乘后赋值 |
变量*=表达式 |
|||
%= |
取模后赋值 |
变量%=表达式 |
|||
+= |
加后赋值 |
变量+=表达式 |
|||
-= |
减后赋值 |
变量-=表达式 |
|||
<<= |
左移后赋值 |
变量<<=表达式 |
|||
>>= |
右移后赋值 |
变量>>=表达式 |
|||
&= |
按位与后赋值 |
变量&=表达式 |
|||
^= |
按位异或后赋值 |
变量^=表达式 |
|||
|= |
按位或后赋值 |
变量|=表达式 |
|||
15 |
, |
逗号运算符 |
表达式,表达式,… |
左到右 |
从左向右顺序运算 |
说明:
同一优先级的运算符,运算次序由结合方向所决定。
简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
2.运算符要点:(1)/ :若为两整数相除,结果仍为整数(小数部分直接舍去,不是四舍五入)
%:要求两边的运算对象均为整数
(2)++、--:j = ++i; :先自加,后赋值
j = i++; :先赋值,后自加
(3)移位运算符
左移:逻辑、算术左移 移位后补0:逻辑移位
右移:算术右移 移位后补符号位:算术移位
作用:增加运算效率(应用:左移n位 = 乘以2n)
(4)位运算符
&:按位与 作用:清零、取出特定位
| :按位或 作用:将某些位定为1
^:按位异或 作用:将某些位翻转
~:按位取反
应用:不使用临时变量交换两数:
a = a ^ b; b = b ^ a; a = a ^ b;
(5)赋值运算符
x = 5;
y = (x == 5); //y = 1;
y = (x = 4); //y = 4;
(6)逗号运算符: 表达式1, 表达式2, ..., 表达式n
从左至右依次执行,返回表达式n的值
3.赋值转换:较长整型->较短整型:直接去掉多余的高端位
实型->整型:舍弃小数部分
整型->浮点:数值不变,但会存在精度问题
高精度浮点->低精度浮点:会有精度损失
4.运算转换:将“窄一点”转换为“宽一点”,以避免精度损失