c语言基础2 字符类型

字符类型的名称是char

这个类型里包含256个不同的整数,每个 整数可以代表一个字符(例如'a', '^'等)
这些整数和字符是可以互相替代的
ASCII码表里列出所有整数和字符之间 的对应关系


'a'          97

'A'          65
'0'          48

ASCII码表里所有小写英文字母都是连续排列 的,并且'a'对应的整数最小,'z'对应的整数最大
所有大写英文字母和阿拉伯数字字符也符合这个规律

'd' - 'a'   等于   'D' - 'A'
'd' - 'a' 等于   '3' - '0'  等于  3 - 0

字符类型中包含的所有字符数据可以分成两组,每组包含128个
其中一组字符所对应的整数在所有计算机上都一样,它们所对应的整数范围 从0开始到127为止
另外一组字符所对应的整数在不同的计算机上可能不同,它们所对应的整数范围可能从-128到-1,也可能从128到255

'\n'    换行
'\r'    回车
'\\'    表示\字符
'\''    表示'字符
'\"'    表示"字符

短整数类型名称是short
它里面包含65536个不同的整数,其中一半是非负数,另外一半是负数。它们以0为中心向两边扩展。

长整数类型名称是long
它里面包含2的32次方个不同的整数,其中 一半是非负数,另外一半是负数。这些数字以0为中心向两边扩展。

整数类型名称是int
在我们的计算机上整数类型和长整数类型完全一样

以上数据类型统称为有符号类型
每个有符号类型都有一个对应的无符号类型
无符号类型的名称就是在对应的有符号类型
    名称前增加unsigned
(例如unsigned char,unsigned short等)
无符号类型所包含的数字个数和对应的有符号类型一样
所有无符号类型中所包含的数字都是从0开始向正数方向扩展的

可以把前面的所有数据类型叫做整数相关类型

整数相关类型所包含的数字范围是相互重叠并且逐渐扩大的

程序中不带小数点的数字后加u表示数字的类型是无符号整数类型

C语言里用浮点类型表示带小数点的数字
浮点类型分成单精度浮点类型和双精度 浮点类型
双精度浮点类型可以记录更多小数点后面的数位
单精度浮点类型名称是float
双精度浮点类型名称是double

程序中使用的带小数点的数字默认都是双精度浮点类型的
在带小数点的数字后加f就表示数字的类型是单精度浮点类型

C语言里允许程序员扩展新的数据类型
这些新的类型叫做复合数据类型
复合数据类型都需要先定义然后才能使用

C99规范中引入布尔类型
这个类型里只包含两个整数,分别是0和1.
0叫做假,1叫做真
真和假都叫做布尔值

C语言里所有整数都可以当作布尔值使用, 0当作布尔值使用的时候是假,其他所有整数当布尔值使用的时候都是真

一般在程序中不需要使用布尔类型,直接把整数当作布尔值使用就可以了

数据类型和占位符的对应关系
char和unsigned char         %c
short                                      %hd
unsigned short                    %hu
long                                       %ld
unsigned long                     %lu
int                                           %d
unsigned int                         %u
float                                       %f或%g
double                                  %lf或%lg
           %f和%lf会保留小数点后面
           多余的0,%g和%lg不会保留

不同数据类型的存储区中包含的字节个数不同
sizeof关键字可以用来记录一个存储区或数据类型里包含的字节个数

char和unsigned char      1个字节
short和unsigned short    2个字节
long和unsigned long      4个字节
int和unsigned int             4个字节
float                                    4个字节
double                               8个字节

sizeof关键字后面的小括号里可以写任何能当作数字使用的内容
sizeof关键字小括号里对任何存储区内容的修改不会真正发生

scanf标准函数可以把用户在键盘上输入的数字记录到存储区里

为了使用这个函数也需要包含stdio.h头文件


scanf函数调用语句里应该使用存储区地址表示存储区
要在双引号里用占位符表示存储区的类型
尽量不要在scanf函数调用语句的双引号里写不是占位符的内容
可以在一条scanf函数调用语句里获得多个数字
如果用户输入的数字格式和程序要求的格式不一样就可能无法获得数字

一个字节分成八段,每段可以记录一个0或者1
如果想把一个数字记录到字节中就必须首先把它拆分成八个0或者1
采用一组0或者1表示数字的方法叫数字的二进制表示方式
任何数字既可以采用二进制方式表示也可以采用十进制方式表示
计算机只能采用二进制方式记录数字
二进制表示方式中每个数位有一个编号, 最右边数位的编号是0,向左依次递增
二进制表示方式中某个数位里的1单独代表的数字就是2的数位编号次方
二进制表示方式中如果两个相邻数位的内容一样则左边数位代表的数字是右边数位的两倍
用二进制表示的非负数符合以上规则
二进制加一时应该把数位编号为0的位置开始的连续多个1变成0,把最右边的0变成1

二进制表示的非负数转换成十进制的方法是把每个数位的内容单独转换,然后把转换结果求和

0011 1011 = 2的5次方 + 2的4次方
            + 2的3次方 + 2的1次方
            + 2的0次方
          = 32 + 16 + 8 + 2 + 1
          = 59

0100 1000 = 2的6次方 + 2的3次方
          = 64 + 8
          = 72

把十进制表示的非负数转换成二进制
12          *******0
 6          ******0
 3          *****1
 1          ****1

转换结果是0000 1100

对数字多次进行除以2保留整数部分的操作得到一组数字,用这组数字中的每个 除以2取余得到一个数位的内容。把所有数位内容从后向前书写就得到转换结果。

负数的二进制和十进制之间不能直接转换,必须借助相反数

转换过程分三歩
1.计算相反数
2.把第一步的结果进行转换
3.根据第二步的结果再计算相反数

根据二进制计算相反数的二进制时首先把所有数位的内容变成相反数,然后再加一

-14
14
0000 1110
1111 0001 + 1 = 1111 0010 (-14的二进制)

有符号类型的二进制最左边的数位叫做符号位,它可以用来判断数字是负数还是非负数。如果符号位是0就表示非负数,如果符号位是1就表示负数。

1101 0011
0010 1100 + 1 = 0010 1101
45
-45

当把占地大的整数相关类型数字赋值给占地小的整数相关类型存储区时只能保留最后的二进制数位,前面的数位内容丢失
当把占地小的有符号整数相关类型数字赋值给占地大的整数相关类型存储区时扩展出来的二进制数位里都要填充

符号位的内容


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值