二进制学习时的笔记(其实也没什么用,留着给自己看的)
二进制简介
只有 0 1
优点:
1.二进制状态简单
2、可靠性、稳定性高
3、运算规则简单,简化设计
4、通用性强
二进制计算
正数二进制
十进制转二进制(除二直到0为止)
规则: 除二倒取余
或者 把一个数字拆成2的n次方相加
55=32+16+4+2+1
2^5+2^4+2^2+2^1+2^0
110111
负数二进制
-77 -1001101
用一位二进制位当作符号为 存符号
int 32位 char 8位
char -77 ——> 最高位当做符号位 1为负号 0位正号
1100 1101 (原码 原码在计算式会出错)
对原码取反
1011 0010 (除了符号位之外 全部取反 反码)
1011 0010+1=1011 0011 (反码加1)
存放的是补码 补码相加不会出错
8位二进制
16+(-13)
16 0001 0000
-13的二进制 1.原码 1000 1101
2.反码 1111 0010
3.补码 1111 0011
原码相加
0001 0000 +
1000 1101 =
1001 1101 (结果是错的)
补码相加
0001 0000 +
1111 0011 =
1 0001 0011 (只有8位,去掉最高位 结果正确)
规定正数的原码、反码和补码是一样的
小数的二进制 和浮点型数据的存放
小数的二进制 2^-6
存浮点型 精度 float 32位 才精确6-7位
32位
最高位 符号位 1位 存放符号 1为负数0为正数
8位指尾数位 1+172——>存到指数位 偏移量(127)
23位 尾数位
1.1001001 左移一位
1.1001001*2^1 //二进制的指数形式
10进制
110=1.10*10^2
-3.1415
1 1000 0000 1001 001 0000 0000 0000 0000
——>127 8位指数位 ——>-127~128 +2^7-1
*/
浮点型二进制
1.首先计算小数的二进制 2.将小数二进制转换成指数形式 3.将小数的符号位存在float的第一位,0为正数, 1为负数.指数部分加上偏移量,存入8位指数位 将指数形式的二进制的小数部分存入尾数位, 如果位数不够 ,在后面用0补齐 P.S 将小数换算成指数形式的时候,规则是将小 移动到第一个1的右边,左移几位就是乘以2的 几次幂
二次学习 补充笔记
数据--->二进制
除法 效率 计算机的除法用减法实现的
二进制的用途---> PS 美图 二进制操作
重点 计算二进制 (10进制数字转换二进制)
1.日常用的都是10进制 10进制-->二进制存放
3(D) 11(B)
进制不同但是可以表示一个东西
2.会算 (计算方式)
3.整数(必须 正数和负数) 浮点型(了解)
4.进制转换 2进制 8进制/16进制 10进制
2进制(计算机存放的方式)(代码中不用)
8进制/16进制 代替2进制(可以和2进制直接转换)
10进制 (平时用的进制)
1.整数的二进制
1.1 正数
int char(-128~127 0~127每个整数对应一个字符 ASCII)
170 123
除2求余
170的二进制 10101010
123的二进制 1111011
int 32位 补齐
0000 0000 0000 0000 0000 0000 0111 1011
char 8位二进制
0111 1011
unsigned 无符号
signed 有符号
(signed)int
unsigned (int) unsigned默认表示unsigned int
unsigned char
(signed)char 默认有符号
1.2 负数
有符号 能够存放负数
负数 3-2 --->3+(-2)
最高位 当作符号位 存放符号 0表示正数 1表示负数
char作为例子
3 0000 0011
-3 1000 0011(最高位当作符号位) --->用这个当作二进制的话 关于负数计算会出错
原码
反码 1111 1100 (原码 除符号位外 其余全部1变0 0变1)
补码 1111 1101 (反码加1)
整数负数二进制 存放的是补码
补码的原因 保证涉及到负数的二进制计算正确
取反加1码
特殊情况
1.char中-128的二进制
反码 1111 1111 原码 -->1000 0000 -128
补码 1000 0000
2.unsigned 存放负数问题
---->计算机用二进制处理数据 (不会报错 不代表没有错误)
按照语法来 (错误的代码再去考虑没有意义)
有符号和无符号 位数是一样的
二进制不分正负
格式占位符----->打印的方式
存放二进制不分正负的 解析方式不一样 处理的结果不一样
%u 无符号10进制整数
%d 有符号10进制整数
%x 无符号16进制整数
%o 无符号8进制整数
unsigned int x=-3;
unsigned int x=0xfffffffd;//代码中16进制表示的话前面加0x 8进制前面加0
//表示 把数据当作无符号整型处理
//计算机是否检查二进制
可以试试 用%d 打印float类型(可以打印 不会报错 但是结果不对)
-3 原码
1000 0000 0000 0000 0000 0000 0000 0011
1111 1111 1111 1111 1111 1111 1111 1100
1111 1111 1111 1111 1111 1111 1111 1101
1Byte =8bit
除法比较慢 整数除以2 >>1 右移一位 除以2
数据 超过范围--->溢出
char ch=-128; 1000 0000
ch--; 0111 1111--->127
2.浮点型二进制的存储(了解)
float double(1+11+52)
float存放数据的范围 -1.7*10^38~1.7*10^38
float 4个字节 32位 (有符号)1+8+23
1位 符号位
8位 指数位
23位 尾数位
-7.88
方法
1.先转2进制小数
符号保留
整数部分按照整数二进制求法
小数部分 乘2取整 从上往下放到小数点的右边
-111.11100001
小数点移动到第一个1的右边
-1.1111100001*2^2 指数形式 左移N位 *2^N
指数存 2 8位 计算方式比较特殊 指数+偏移量
2 +127--->129 1000 0001
加上一个偏移量 2^(指数位位数-1)-1
8位指数位 2^8 256 一半存负数和0 一半存正数
float的指数位的范围 -127~128
0000 0000 --->-127
0000 0001 --->-126
.....
1000 0000 --->1
1000 0001 ---->2
尾数位 小数点后面的内容 后面 补齐0
1 1000 0001 111 1100 0010 0000 0000 0000
浮点型 存放规则--->
结论
1.浮点型 存放不够精确
== 比较 x==4 整型
浮点型一般不用== 给他一个范围
d<=4.001&&d>=3.999
double和float 赋值一样但是保存的值不一样
float快 精度要求不高 float 不然double
**** 保存数据都是近似值
3.进制转换
10进制转2进制--->除2求余
10进制转8进制 除8求余
除16求余 (a~f 表示 10~15) 可以大写A~F
16进制 --->10进制
N进制转10进制
0xAF--->从右往左 从0开始依次标号
每一位*N^标号(求和)
2进制和16进制相互转换
0xAF
2进制--> 1010 1111
一位16进制转4位二进制
二进制转16进制
1100 0000 1111 1100 0010 0000 0000 0000
-->C0FC2000 四位转一位 -->0xC0FC2000
一位8进制转3位二进制 3位二进制转一位8进制
动笔算 --->最后的结论 全部写16进制-->直接提交结果
1.算二进制 (用char 8位算)
98
-76
选做
2. 算二进制(float 32位二进制算)
-3.625
short(int)
long (int)
2018.05.13 21:24:13