二进制知识详解(理论联系实际)

绪言

本知识点可用于汇编语言、常见编程语言(脚本语言/面向对象过程语言/面向对象语言/函数式编程语言)、计算机组成原理、密码学等学科的基础学习.

20200103 二进制知识

常用换算

20200103 二进制知识
2^10 = 1024 = 10^3
1Word = 2Bytes = 16Bits(字,字节,位/比特)
“逢X进一”
权位,X^i
Binary二进制,B,0-1,2^k
Octal八进制,O,0-7,8^k
Decimal十进制,D,0-9,10^k
Hexadecimal十六进制,H,0-F,,16^k
Eg: 21H = 33D = 41O = 100001B

进制转换

任意进制转十进制:“按权展开,相乘求和“”
十进制转任意进制:整数部分“除基数,取余数”,小数部分“乘基数,取整数(部分)”
二进制转八进制:“三位合一”
整数部分自右往左,小数部分从左往右,两端补齐(整数左补0,小数右补0)
八转二:“一位拆三”
二转十六:“四位合一”
十六转二:“一位拆四”
降幂法:减去权位值,“能减为1,不能减为0”
“8421”快速转化:32,64,128,256

有无符号数

有符号数:
机器字长必定为2的整数倍,即可能取值为8,16,32,64
以8位为例,最左边第1位是正负符号位,后7位为数值位
速记结论:后七位权值总和比第八位权值(也就是最左边的第1位)小1,即
i = 0 n 2 2 i = 2 n 1 1 \sum_{i=0}^{n-2} {2^i} = 2^{n-1}-1 ,其中n为机器字长


16位字长机器:2^15 = 32768
有符号数:数值划分为负数、0和正数,故2^16 / 2 = 2^15,且0是从正数部分抠出去的,
因而正数范围比复数范围少1
n位二进制补码的表数范围: 2 n 1 -2^{n-1} ~ 2 n 1 1 2^{n-1}-1
无符号整数的表数范围: 0 ~ 2 n 2^n
符号位:0表示正,1表示负
原码:因符号位而有正负之分,0也有正负之分、因此0的表示不唯一
反码:正数反码同原码,负数反码要数值位取反,符号位不做变动,0的表示也不唯一
补码:正数补码同原码,负数补码除了最右边1位不变动,其余数值位取反,
符号位也不用动,补码0的表示唯一,都为完全0值
其他说法:
(1)写出正数的补码,“最左边的符号位由1(负)改0(正)即可”
(2)按位求反,“包括符号位和数值位”
(3)末位加一“逢2进1”
移码:不论正负,符号位与补码相反,数值位完全相同

双符号位

数值溢出问题与双符号位制:
进位“逢2进1”,溢出
正数前边补0变双00,负数前边补1变双11
二进制数四则运算:
加:[X+Y] 补码= [X]补码+ [Y] 补码
减:加法化加法,即(此时需要求负数补码)
[X-Y] 补码= [X]补码+ [-Y] 补码
乘:符号位异或运算,数值位用并行乘法(器)
除:并行除法
规律总结如下:
对于正数:[X] 原码= [X]反码+ [X] 补码
正负0的补码(或移码)具有唯一表示,原码和反码表示并不唯一(符号位引起不同)

逻辑运算

又叫按位运算(汇编上等价)
与AND, 标记为 ^ 或 · “同真才真1”
或OR, 标记为 ∨ 或 + “同假才假0”
非NOT, 标记为 ¬ 或 ~ 或 ’ “真假互变”
异或XOR,标记为 ∀ 或 ㊉ “相异为真1”
运算优先级:括号最高
NOT 运算符具有最高优先级,然后是 AND 和 OR 运算符
“单运算符优先级要比双运算符的高”

ASCII码

常用知识

20200104 补充知识:
‘A’ 65Dec = 41Hex
‘a’ 97Dec = 61Hex
字母大小写互换:±32
‘0’ 48D = 30H
(space),空格 32D = 20H = 0x20
CR (carriage return),回车 13D = 0DH = 0x0D
LF (NL line feed, new line),换行键 11D = 0AH = 0x0A
NUL(null),空字符 0000 0000,0D = 0x00
ESC (escape),换码(溢出) 0001 1011,27 = 0x1B

总结规律

ASCII码值由小到大的排列顺序:空格字符、数字符、大写英文字母、小写英文字母
各国编码不同:
0–127表示的符号是一样的,但是128—255段各自相异
字符各异的字符串理论长度为: 256
中、日、韩等国的象形文字,双字节字符集:其中汉字为GB系列(典型如GBK)
在GBK编码中,不论中英文都是双字节的
UTF-8为国际通用编码:
“外国人访问GBK网页要下载中文语言包支持,访问UTF-8编码的网页不出现此类问题”

20200104异或运算

常用结论

1.任何数与0异或 = 自身:00=0,01=1
2.任何数与1异或 = 自身取反:10=1,11=0
3.任何数自我异或 = 重置为0:11=0,00=0
1用于补充二进制位数,不产生异或运算影响;
2用于按位取反,即位翻转,经常需要与1相结合使用;
3用于置0/初始化/判等,eg: return ((a ^ b) == 0)
汇编上置0: xor a,a
异或运算不仅可以判等,也可应用于比较大小
3次异或运算实现两数交换:
a = a^b;//第1个结果为较大数与较小数之差值
b = b^a;//第2、3个数开始交换原始数值
a = a^b;
a^b = b^a,数学上类似 (a-b)^2 = (b-a)^2,均匀分布方差=1/12平方值

区分逻辑与按位

(以C/C++为例)
逻辑运算:逻辑运算即是布尔运算,结果非真(true)即假(false)
一共3个: 与&& 或|| 非!
位运算:用于快速完成运算操作(基于底层二进制)
一共4个: 按位与& 按位或| 按位非~ 按位异或^

判断奇偶

按位与运算的应用:任何数可跟1按位与实现奇偶数判断,即
A1=1则为奇数,A1=0则为偶数
因为“0000……0001”使得原数值二进制表示后仅最末尾有实际意义,且“同真才真”

区别与联系

(对立统一)
逻辑运算与、逻辑或有短路机制,按位与、按位或不会短路
按位运算符可以用于逻辑运算,但是执行效率更低
逻辑运算用于逻辑判断,按位运算用于数值运算

后记补充

Markdown插入数学公式办法

学习链接

后记交流

QQ:2636105163
可发邮件,也可加好友
群聊:956349248

手工码字,如有错误欢迎指正!

2020/01/04 05:53

发布了89 篇原创文章 · 获赞 159 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/I_love_you_dandan/article/details/103828948