day03 负数二进制求法

字符类型名称是char
字符类型里包含256个不同的整数,每个
   整数可以用来代表一个字符(例如'a',
   '^'等)
这些整数和字符可以互相替代
ASCII码表中列出所有整数和字符的对应关系
'a'          97
'A'          65
'0'          48

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

'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 int等)
无符号类型和它对应的有符号类型所包含的
    整数个数一样,但是不包含负数

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

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

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

程序中带小数点的数字默认是双精度浮点类型的
如果带小数点的数字后加f就表示这个数字的
   类型是单精度浮点类型

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

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

任何一个整数都可以当作布尔值使用,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个字节
int和uunsigned int         4个字节
long和unsigned long        4个字节
float                      4个字节
double                     8个字节

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

scanf标准函数可以把用户在键盘上输入的
   数字记录到变量的存储区里
为了使用这个标准函数需要包含stdio.h头文件
scanf函数调用语句里需要使用存储区的地址
    表示存储区
双引号里使用占位符表示存储区的类型

不要在scanf函数调用语句的双引号里写不是
    占位符的内容
可以在一条scanf函数调用语句里获得多个数字
如果用户输入的格式和程序中要求的格式不同
    就无法获得数字

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

二进制表示的非负数转换成十进制的时候只
   需要把每个数位里的内容单独转换然后
    再求和

0000 0101 = 2的2次方 + 2的0次方
          = 4 + 1
          = 5

0010 1100 = 2的5次方 + 2的3次方 + 2的2次方
          = 32 + 8 +4
          = 44

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

转换结果是0000 1100

不断对原始数字进行除以2保留整数部分的操作
   得到一组数字,用其中每个数字除以2取余
   得到一个数位的内容,把所有数位的内容
    按照从后向前的顺序书写就得到转换结果

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

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

把二进制表示方式中每个数位的内容变成
    相反内容然后再加一就得到相反数
    的二进制

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

有符号类型数字最左边的二进制数位可以帮助
    判断数字的符号,这个数位叫做符号位
符号位是0表示数字是非负数,符号位是1表示
    数字是负数

1100 0101
0011 1010 + 1 = 0011 1011
59
-59

预习:
    1.八进制和十六进制
    2.操作符
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值