1、c语言的数据类型
sizeof()这个运算符计算每一种类型占用的字节数
页面字节数是以64位系统计算的
字符型: char (1个字节)
整形: int (4)
short/ short int (短整型)(2),long /long int(长整型)(8),long /long int(长整型)(8)
浮点型 :float(单精度)(4), double(双精度)(8)
布尔型:bool(1)
结论:每一种类型占用的字节数不一样,所以每一种类型占用的空间大小也不一样,取值范围也不一样。
取值范围:
char 类型占用一个字节的空间,也就是8个2进制。
char类型的数据范围是从0000 0000 ~ 1111 1111
如果表示的是非负数(无符号,unsigned):0~255 (0 ~2^8-1)
如果表示的是有符号数(可正可负,signed,可省略):-128~127(-2^7~2^7-1)
1、系统是如何保存正数和负数?
正数直接以2进制保存。
负数是以补码的方式保存的。补码是反码+1.反码就是正码按位取反(0变1,1变0)。正码就是负数的绝对值转换成2进制。
例如:5 ===》0000 0101
-5===》1111 1011
2、系统又是怎么去判断这个数是正数还是负数?
如果是有符号数,是以最高位做为符号位,0表示正数,1表示负数
如果是无符号数,就没有符号位,所有的位都是数据位。
char类型的取值范围:(有符号的取值范围)
参考char类型的取值范围,求取short,int,long的取值范围。
short : -2^15 ~ 2^15-1====-32768~32767
0~2^16-1====0~65535
int :-2^31 ~ 2^31-1
0~2^32-1====0~4,294,967,295
long:-2^63 ~2^63-1
0~2^64-1
补充:
短整型整数: 9H 89h
长整型整数:89L 777l
1、标准输入与输出:
格式化输出函数:printf函数
%c--字符型 %d-- 整形 %u --无符号 %o--八进制 % x/%#x--十六进制
%ld--长整型 %hd--短整型 %s--字符串 %p--地址类型 %f--浮点型
.....
\t--水平制表 ...
int i=9;
printf("%d",i); // %d 告诉计算机以何种形式输出 i 的值
格式化输入函数 :scanf
将键盘输入的数据以某种格式保存下来
int i;
scanf ("%d",&i);
//&取址符,表示获取变量 i 的地址
//从键盘获取到的数据以整型的格式通过i的地址然后保存到变量i中
注意:使用scanf函数的时候,双引号内你是什么样的设置,输入的时候会匹配
尽量不要在双引号内加入其他字符
补充:如果出现一个整数,编译器是默认为int的数值。那如果出现的是小数,默认为double类型。
数据类型本身不占用内存,定义出来的变量占用内存
注意:一个字节8个位,是指第0到第7位。
2、进制之间的转换
计算机常用的是2进制,8进制,16进制
2进制: 有0和1组成的数字
1=1=10
8进制: 有0~7组成的数字,在代码中以0开头,表示这是一个8进制数
7+1=10
2进制与8进制之间的转换:每3位2进制转换成1位8进制,反之亦然
例如:2 进制数 101 000 111 —>8 进制 507
8进制数 63547 —> 2进制 110 011 101 100 111
8进制转换成十进制
0777 ——> 0*8^3+7*8^2+7*8^1+7*8^0
16进制数: 由0~9,a, b, c, d, e, f (大写也一样)组成的数字,在代码中以0x开头来表示
例如: 0x13 0x87 0x6d
0x9+0x5=0xe
2进制与16进制之间的转换: 每4位2进制转换成一位16进制,反之亦然
例如: 2进制数 0101 0011 1111 0101 —— > 16进制数 53f5
16进制数9a5f6c——>2进制数1001 1010 0101 1111 0110 1100
8进制数0666 ===》10进制数 6*8^2+6*8^1+6*8^0 = 384+48+6=438
16进制数0x123 ===》10进制数 1*16^2+2*16^1+3*16^0=256+32+3=291
10进制数6666===》8进制数15012
===》16进制数1a0a
需要掌握:数据类型,变量,常量,数值的存储,进制的转换。格式化输入输出函数的使用
补充:如果将一个小数赋值给整型变量,小数部分直接舍弃,只保留整数部分。
===========================================================================
运算符
1、算数运算符
+ - * / % ——》双目运算符
/ 参与运算的对象是两个整数,得到的商是整数,如果有一个对象是小数,则结果是小数
例如; 5/2=2 5/2.0=2.5 5.0/2=2.5
% :参与运算的对象必须是整数。
++ -- ——》 单目运算符
运算逻辑: 运算对象不能是常量,放在对象前面的时候,是先自加/自减1,再参与运算。如果是放在对象的后面,是先参与运算,后自加/自减1.
A++ ——》A先参与运算,之后A=A+1
++A ——》 A=A+1,再参与运算
2:比较运算符
> < ==(等于号) != >= <= ==>双目运算符
比较表达式的结果:成立为1,不成立为0
例如: 2>3 ==》0 6>=5 ==》1
3:逻辑运算符
&& || ===》双目运算符 A && B A || B
!===》单目运算符 !A
用1来表示逻辑真,用0来表示逻辑假。
在C语言里面,非0即真。
运算逻辑符:
&&(逻辑与并且):只有两个表达式的结果为真,整个逻辑表达式的结果才为 真。
例如: 1 && 6 ==》1 0 && 0.022 ==》0
||(逻辑或,或者):只有两个表达式的结果为假,整个逻辑表达式结果才为假。||(逻辑或,或者):只有两个表达式的结果为假,整个逻辑表达式结果才为假。
4:位运算符:针对2进制位的运算
注意:如果最高位是符号位,左移右移不影响
5:赋值运算符:=
6:逗号运算符:,
运算逻辑:从左往右依次运行每个表达式,将最后一个表达式的结果作为整个逗号表达式的结果。
注意:通常逗号是作为分隔符来使用的。
在C语言中,逗号运算符的优先级是最低的。
7:其他运算符:() [] . -> sizeof()
8:C语言中唯一一个三目运算符:A?B:C;
运算逻辑:如果A为真,执行B,否则执行C