C语言基本理论一

C语言的基本数据类型
字符 char
整数 short int long long long
浮点 float double

数据类型          宽度          取值范围
signed char       1          -128~127
unsigned char     1            0~255
short             2        -2^15 2^15-1
unsigned short    2           2^16 -1
int               4         -2^31 2^31-1
unsigned int      4          0 2^32 -1
long             4/8          
unsigned long    4/8
long long         8
float              4          3.4*10^38
double            8         1.79*10^308
long double       8/12

signed 可以省略  默认是signed

C语言进制与编码
二进制 八进制 十进制 十六进制 转换
在程序中直接写的是十进制 八进制0打头 十六进制 0x;
对于unsigned 所有的二进制位都是表示数值;
对于singed 最高位表示符号位 0表示正数 1表示负数;
原码 反码 补码:
如果对于一个有符号的数据,最高位如果是1那么一定是负数 不管是 什么编码;
负数的原码、反码、补码,最高位一定是1;
计算机中数据的保存一律采用补码形式;

C语言变量与标识符
变量的定义

数据类型 标识符;
C语言中变量必须先声明(定义)才能使用
C语言中变量的类型是明确的 不能是多个类型
C语言中在同一个作用域下面 变量不能重复声明(定义)

变量的使用

可以通过变量名 对 该变量进行赋值 第一次赋值 变量的初始化
通过变量名取得变量的值
赋值 对变量进行修改 取值 取内存中的数值

定义变量 在栈内存中分配了一块数据类型大小的内存空间 然后用变量名来指代该内存区域
通过操作变量名 其实是操作这片内存区域中的数据

标识符规则:
1. 字母、数字、下划线组成
2. 不能是数字开头
3. 不能和关键字冲突

C89中32个关键字:
	char short ing long float double
	signed unsigned 
	void auto const  static register volatile extern
	sizeof
	if else switch case default break
	for while do goto continue
	return
	typedef
	struct union enum
	运算符 操作符

算术运算符

/ % + - *
数据溢出问题
/ 对于整数 整除
除数不能为0 但是可以是0.0
浮点数不精确的值 一个区间范围的值
% 取余 判断是否可以整除(余数为0)

自增减运算符

++ –
前++ --: 先自增减,然后再进行表达式的计算
后++ --: 先计算表达式,然后再进行表达式的计算

比较(关系)运算符

< <= > >= == !=
比较运算符的结果是 0 或者 1
比较运算符如果连用 从左往右计算
10<a<2 恒成立

逻辑运算符

&& || !
表达式的结果是 0 或者 1
“零值”: 0 ‘\0’ NULL 0.0
短路特性:
false && expr expr不会计算
true || expr expr不会计算
a||b&&c ==> a||(b&&c)
a&&b||c ==> (a&&b)||c

赋值运算符

= += -= *= /= %= &= |= ^= >>= <<=
从向往左
左值(left value): 能够放在=左边 变量
右值(right value): 只能够放在=右边 数值 表达式

位运算符

适用于整数(char short int long)
& | ^ ~ >> <<
1.按二进制进行运算 对应的二进制位
2.计算机中存储补码
二进制0和1:
1&1=1 1&0=0 0&1=0 0&0=0
1|1=1 1|0=1 0|1=1 0|0=0
1^1=0 1^0=1 0^1=1 0^0=0
~1=0 ~0=1
对于十进制的数据num 0 和 -1:
0&num == 0
-1&num == num
0|num == num
-1|num == -1
0^num == num
-1^num == ~num == -(num+1)

>>  右移
	对于signed数据类型右移n位 右边移出的位全部舍弃  左边空出的位全部补符号位
	对于unsigned数据类型右移n位 右边移出的位全部舍弃 左边空出的位全部补0
	
	对于siged数据每向右移一位 相当于除以2
		对于负的偶数 向右移一位 相当于除以2  但是负奇数 两个值会相差1
	num >> n
		n一般要小于num二进制位的位数,但是如果大于会自动求余再移位
<<  左移
	左边移出的位全部舍弃 右边空出的位全部补0
	每往左移一位相当于乘以2
	## 三目运算符

三目: 三个操作数
?:
expr?expr1:expr2
expr表达式结果如果为逻辑1(真),那么计算表达式expr1,否则执行expr2
最终的结果是expr1或者expr2计算的结果
expr1和expr2只会执行其中一个

逻辑1: 数值3是逻辑1

sizeof 内存宽度运算符

不是一个函数 sizeof是运算符
sizeof 操作数可以是 数值、变量、表达式、类型
在不同的平台的结果可能不一样
char c = ‘a’, b = ‘a’;
sizeof(‘a’) 和 sizeof© 结果不一样
sizeof(‘a’) == 4 'a’其实认为是整数
sizeof© == 1 c是变量 变量的类型是char,char一定是一字节
sizeof(c+1) == 4
sizeof(++c) == 1
sizeof(c+b) == 4
sizeof(c=b+c) == 1
操作数如果是类型 必须 要有() 即 sizeof(类型)
操作数如果不是类型则可以省略

sizeof(表达式) 不会计算表达式
sizeof只关心内存宽度,不计算表达式
表达式如果是一个混合类型 虽然不计算表达式 但结果取内存宽度最大的值
表达式在进行计算时数据会进行转换
char->int short->int
unsigned char --> unsigned int

sizeof(函数名) == 1
sizeof(函数名(参数)) == 函数声明返回值类型宽度 函数并不会调用

sizeof(指针) == 4/8

下标运算符 []

数组 [] 运算符可以被其他替代

指针运算符 * &

*  取值    取内存的中数据
&  取址    取数据的地址
*和&的运算可以相互抵消
	*&  &*

成员运算符 . ->

. 结构体 联合体 共用体 变量访问属性
-> 结构体 联合体 共用体 指针变量访问局长

函数运算符 优先级运算符()

自定义函数 int func(){}
运算符的优先级
在不确定优先级的情况下 加()
尽量用()方便阅读和理解

逗号运算符 ,

int x,y;
x+y,z+c;

运算符优先级:
! > 算术优先级 > 关系运算符 > && > || > 赋值运算符
~ > 算术 > 移位

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值