流程图
一、数据类型的定义
(1)、数据类型的定义
变量的定义:
数据类型 变量名【标识符】
变量的赋值:
变量名 = 值;
数据类型 变量名【标识符】 = 值
标示符的命名规则:
1、字母、数字、下划线
2、不能以数字开头
3、见名知义
4、不能和同一函数内的其他标示符重复
5、不能使用C语言关键字
6、区分大小写
标示符:
ABC
abc
—abc
_abc.
123_bac
a_b_123
常量的定义:
1、const 数据类型 常量名
2、【宏定义】#deifne 常量名 值
注意:
1、通过#define 定义的常量 是根据值来匹配数据类型的 -> 提高代码可读性,方便进行修改
2、const 修饰的常量是不安全 可以通过指针来修改
二、进制转换
二进制:
二进制逢二进一,所有的数组是0、1组成
十进制转二进制:
除二反序取余法:将十进制数每次除以2 取出余数 按照结果倒叙依次获取结果
其它情况下,十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。以0.875为例,具体做法是:
(一)、取整运算
1、用2乘十进制小数,可以得到积:2*0.875=1.75;
2、将积的整数部分1取出,再用2乘余下的小数部分0.75,又得到一个积,则2*0.75=1.5‘
3、再将积的整数部分取出,如此进行,则0.5*2=1.0;此时,积中的小数部分为零,此时0或1为二进制的最后一位,不再往下计算。
(二)、按序排列
把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。即0.875=(0.111)B
二进制转十进制
权值法:将二进制数各个位数从0位开始乘以2的N幂 将各个位数的结果相加
先了解一下: 2的n次方对照表
2的1次方:2
2的2次方:4
2的3次方:8
2的4次方:16
2的5次方:32
2的6次方:64
2的7次方:128
2的8次方:256
2的9次方:512
2的10次方:1024
2的11次方:2048
2的12次方:4096
2的13次方:8192
2的14次方:16384
2的15次方:32768
2的16次方:65536
2的17次方:131072
2的18次方:262144
2的19次方:524288
2的20次方:1048576
2的21次方:2097152
2的22次方:4194304
2的23次方:8388608
2的24次方:16777216
2的25次方:33554432
2的26次方:67108864
2的27次方:134217728
2的28次方:268435456
2的29次方:536870912
2的30次方:1073741824
2的31次方:2147483648
2的32次方:4294967296
2的33次方:8589934592
2的34次方:17179869184
2的35次方:34359738368
2的36次方:68719476736
2的37次方:137438953472
2的38次方:274877906944
2的39次方:549755813888
2的40次方:1099511627776
2的41次方:2199023255552
2的42次方:4398046511104
2的43次方:8796093022208
2的44次方:17592186044416
2的45次方:35184372088832
2的46次方:70368744177664
2的47次方:140737488355328
2的48次方:281474976710656
2的49次方:562949953421312
2的50次方:1125899906842624
2的51次方:2251799813685248
2的52次方:4503599627370496
2的53次方:9007199254740992
2的54次方:18014398509481984
2的55次方:36028797018963968
2的56次方:72057594037927936
2的57次方:144115188075855872
2的58次方:288230376151711744
2的59次方:576460752303423488
2的60次方:1152921504606846976
2的61次方:2305843009213693952
2的62次方:4611686018427387904
2的63次方:9223372036854775808
2的64次方:18446744073709551616
十进制转八进制
十进制转十六进制
十六进制转十进制
二进制转十六进制
八进制转十六进制
其它说明:
8421法则:
将各个位数的二进制用十进制中的【数字 】来表示多位的二进制数 通过【数字 】相加就可以得到二进制数的数据
8 1000
4 100
2 10
1 1
1000
100
10
1
————
1 1 1 1
进制在程序中打印:
int a=10;//十进制中的10
int b=010;//八进制中的10 在程序中定义一个八进制数需要在数前面加上0区分
int c=0x10;//十六进制中的10在程序中定义一个十六进制数需要在数前面加上0x区分
int d=0X10;//十六进制中的10在程序中定义一个十六进制数需要在数前面加上0X区分
注意:在程序中没有办法表示一个二进制数
%d 将数据按照十进制输出
%o将数据按照八进制输出
%x将数据按照十六进制小写输出
%X将数据按照十六进制大写输出
三、原码、反码、补码
一个有符号的整型数据可以分为两部分一部分是符号位、一部分是数字位
无符号数据类型只包含数字位部分
signed int a= 1986(有符号标识 signed可以不用写)
二进制:11111000010
1986原码:0000 0000 0000 0000 0000 0111 1100 0010
-1986原码:1000 0000 0000 0000 0000 0111 1100 0010
1986反码: 0000 0000 0000 0000 0000 0111 1100 0010
-1986反码:1111 1111 1111 1111 1111 1000 0011 1101
1986补码: 0000 0000 0000 0000 0000 0111 1100 0010
-1986反码:1111 1111 1111 1111 1111 1000 0011 1110
1 0000 0000 0000 0000 0000 0000 0000 0000
溢出:在数据进行操作的时候会导致超出数据类型大小,会向前位进1,多于原始数据类型大小,会被系统自动舍弃 保留从后面开始数据类型大小的位数
10+20
0000 1010
0001 0100
0001 1110
-10±20
原码:1000 1010
反码:1111 0101
补码:1111 0110
原码:1001 0100
反码:1110 1011
补码:1110 1100
1111 0110
1110 1100
补码:1110 0010
反码:1110 0001
原码:1001 1110 16+8+4+2=-30
练习:用生辰年份年去生辰日期
1992
-326
1、将10进制转化为二进制
1992 :0000 0000 0000 0000 0000 0111 1100 1000
-326 :0000 0000 0000 0000 0000 0001 0100 0110
2、加符号位将数据变为原码
1992 :0000 0000 0000 0000 0000 0111 1100 1000
-326 :1000 0000 0000 0000 0000 0001 0100 0110
3、转化为反码
1992 :0000 0000 0000 0000 0000 0111 1100 1000
-326 :1111 1111 1111 1111 1111 1110 1011 1001
4、将反码+1转化为补码
1992 :0000 0000 0000 0000 0000 0111 1100 1000
-326 :1111 1111 1111 1111 1111 1110 1011 1010
5、计算补码
1992 :0000 0000 0000 0000 0000 0111 1100 1000
-326 :1111 1111 1111 1111 1111 1110 1011 1010
结果 : 1 0000 0000 0000 0000 0000 0110 1000 0010
6、将数据转化为10进制
110 1000 0010
2+128+512+1024 = 1666
无符号:
unsigned int a= 1986
无符号:1111 1111 1111 1111 1111 1111 1111 1111 =
0000 0000 0000 0000 0000 0000 0000 0000 =0
无符号整型取值:0-4294967295(2^32-1)
无符号的字符型:0-255
有符号:
int a= 1986
0111 1111 1111 1111 1111 1111 1111 1111 = 2147483647
0000 0000 0000 0000 0000 0000 0000 0001
原码: 1111 1111 1111 1111 1111 1111 1111 1111 = -2147483647
反码:1000 0000 0000 0000 0000 0000 0000 0000
补码:1000 0000 0000 0000 0000 0000 0000 0001=-2147483647
-0的补码
补码:1000 0000 0000 0000 0000 0000 0000 0000=-0 = -2147483648
四、数据类型说明
字符型:
char 用于存储一个单一的字符
在格式化输入printf(“%c”,变量)通过占位符%c来接收的
每一个char类型都对应在ASCII中有具体的值
例如:数字【0】对应的ASCII值为48
字母【A】对应的ASCII值为65
字母【a】对应的ASCII值为97
转义字符:
计算机会使用一些字符来完成程序设计,如果在编程中想使用这些字符的本意,需要通过【\】来转义
注意:想在控制台中输出% 需要使用【%%】
浮点型:
float 用于存储带有小数的数据
在格式化输入printf(“%f”,变量)通过占位符%f来接收的
double 用于存储带有小数的数据 数据长度比float更长
注意:因为将小数转化为二进制时不是一个精确的值,所以浮点型都会有数据偏差