一、信息的存储方式
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.运算转换:将“窄一点”转换为“宽一点”,以避免精度损失