C语言(2)

字符类型名称是char
里面包含256个整数
每个整数和一个字符数据(列如‘&’)对应整数和字符数据可以相互替代
ASCII码表记录所有整数和字符数据之间的关系:‘a’ 97 ‘A’ 65 ‘0’ 48
ASCII码表里所有小写英文字母是连续的,并且‘a’最小,‘z’最大
大写英文字母和数字字符也都符合这个规律
‘d’-‘a’等于3
‘D’-‘A’等于3
‘3’-‘0’等于3
我们的计算机里字符类型包含的数字范围从-128到127
在有些计算机里字符类型包含的数字范围从0到255
所有计算机里0到127之间的整数对应的字符都一样

‘\n’ 换行 ‘\r’回车 ‘\’字符\ ‘’’字符’ ‘\’’'字符”

短整数类型名称是short 里面包含2的16次方个不同的整数
长整型类型名称是long 里面包含2的32次方个不同的整数
整型类型名称是int 在我们的计算机里整数类型和长整数类型完全一样
以上类型都叫做有符号类型
它们里面都是既包含负数又包含非负数

每个有符号类型都有一个对应的无符号类型
字符类型名称是char,它所对应的无符号类型名称是unsigned char(无符号字符类型)
其他类型与此类似 如:unsigned int
所有无符号类型里不包含负数

程序里所有不带小数点的数字默认都是整数类型的
不带小数点的数字后加u表示数字是无符号整数类型
浮点类型用来表示带小数点的数字
浮点类型分为单精度浮点类型和双精度浮点类型
单精度浮点类型名称是float
双精度浮点类型名称是double

程序里所有带小数点的数字默认都是双精度浮点类型的
带小数点的数字后加f表示数字是单精度

C语言里可以扩展新的数据类型

C99
规范里引入了布尔类型
布尔类型里只包含0和1两个整数
0叫做假,1叫做真
真和假都叫做布尔值

所有整数都可以作为布尔值使用
0做布尔值使用的时候是假,其他整数做布尔值使用的时候都是真

数据类型和占位符的对应关系
char %c和%hhd
unsigned char %c和%hhu
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关键字后面的小括号里对任何存储区内容的修改不会真正发生

scanf标准函数可以从键盘得到数字并记录到变量里
为了使用这个标准函数需要包含stdio.h头文件
scanf函数调用语句的双引号里不要包含占位符以外的内容
如果用户输入的内容和希望的格式不一样就无法获得数字
scanf函数调用语句可以同时获得很多个数字

一个字节分为八段,每段可以记录一个0或者1
想要把一个数字记录到字节里必须首先把它拆分为八个0或者1
采用一组0或者1表示数字的方法叫二进制表示方式
二进制和十进制是两种表示数的方式,它们各自用不同的环境下
计算机只能记录以二进制方式表示的数字
二进制表示方式里每个数位有一个编号
编号方式如下
76543210(数位编号)
********(数位)

二进制表示方式里每个1单独代表一个数字,这个数字的数值就是2的数位
编号次方
76543210(数位编号)
********(数位)
00010000(2的4次方,4是数位编号)

如果两个相邻数位的内容一样那左边的数字是右边数字的2倍
76543210 (数位编号)
******** (数位)
01100000 (第6位的1代表2的6次方,第5位 的1代表2的5次方.第6位的1是第5位1的2倍)
用二进制表示的非负数符合以上规律

二进制数字加一的时候把最右边的多个连续的1都变成0,把最右边的0变成1(这些1必须从编号为0的位置开始,0无所谓)
00101111+1
00110000

用二进制表示的非负数去掉最右边的数位结果相当于这个数字除以2并保留整数部分

76543210(数位编号)
01101011
6543210(数位编号)
0110101

二进制表示的非负数转换成十进制的时候可以把每个数位的内容单独转换然后在求和
01101010 = 2的6次方+2的5次方+2的3次方+2的1次方=64+32+8+2=106

对原始数字多次进行除以2并保留整数部分的操作得到一组数字
用每个数字除以2取余得到一个数位的内容
把得到的所有数位内容从后向前倒序书写就得到转换结果
91 1
45 1
22 0
11 1
5 1
2 0
1 1
0 0
转换结果是01011011

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

转换过程分三步
1.首先计算相反数
2.把得到的相反数转换成另外的格式
3.根据转换结果再计算一次相反数

为了计算一个二进制数字的相反数可以把每个数位的内容都变成相反数然后再加一
01101011(原始数字)
10010100+1=10010101(相反数)
01101010+1=01101011(再次计算相反数又回到原始数字)

有符号类型数字才有符号
二进制数字最左边的数位叫做符号位,它的内容可以用来确定数字的符号
符号位的内容是0表示数字是非负数
符号位的内容是1表示数字是负数

把二进制数字的数位从右到左每三个数位分为一组,每组用一个0到7之间的数字替换就得到数字的八进制表示方式

可以直接在程序里用八进制表示方式写数字,这种数字必须以0做开头
使用%o做占位符可以把数字的八进制表示方式显示在屏幕上

把二进制数字所有数位从右向左每四个数位分为一组,每组用一个字符替换(用a到f之间的数字替换10到15之间的数字),这个替换结果叫做数字的十六进制表示方式
1100 1011 cb(十六进制)
可以直接在程序里十六进制方式书写数字,这种数字必须用0x做开头
可以使用%x或者%X做占位符把数字的十六进制表示方式显示在屏幕上
用%x做占位符的时候显示结果里所有字母都是小写的
用%X做占位符的时候显示结果里所有字母都是大写的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值