常用术语
比特(Bit):最小可操作单位
字节(Byte):最小存储单位,
= 8 Bit,如下表,b7称MSB(Most Significant Bit),b0称LSB(Least Significant Bit)
因为b7=1等价于
,而b0=1等价于MSB LSB
b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
半字(HALF WORD):二个字节或者16bit,
b15 | b14 | b13 | b12 | b11 | b10 | b9 | b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
字(WORD):四个字节或者32bit
表征范围(Alternatives):可能性总数。
一个比特,最多两种可能,0 或 1。
一个字节,包含8个比特,每个比特两种可能,所以,最多256种可能。
比特数 | (最小)字节数 | 可能数 |
8 | 1 | 256 |
10 | 2 | 1024(1K) |
12 | 2 | 4096 |
16 | 2 | 65536 |
20 | 3 | 1,048,576(1M) |
30 | 4 | 1,073,741,824(1G) |
n | n/8向上取整 |
精度(Precision):可表示数值的多少。和表征范围息息相关。
分辨率(Resolution):可分辨的最小差异。
举例,测量0-3.3V模拟信号输入,12bit ADC分辨率(3.3-0)/
=0.8mV,精度是12位(4096个数值)。良好编程习惯
传统C没有明确char, short, int, long 等存储大小,
建议使用 C99 <stdint.h> 整数类型,uint64_t, int64_t, uint32_t, int32_t, uint16_t, int16_t, uint8_t, int8_t,显示表明符号和存储数据位数。
二进制整数转换为十进制整数,需要考虑符号
无符号整数(unsigned):MSB不表示符号(+ -)
举例,
练习1,将无符号
转换成十进制数。有符号整数(unsigned):MSB表示符号(+ -)
举例,
练习2,将有符号
转换成十进制数。
常用规则
1. b0=0整数是偶数,例如
是偶数,b0=1是奇数,例如是奇数2. 最后N位为0(bN-1=0...b0=0),该整数可被
整除,例如,可以为8()整除
十进制整数转换为二进制整数,需要考虑符号
举例,将十进制整数100转为二进制表示,首先画一个表如下,我们需要判断8次,结果列问号处填入0或1.
数值 | 二进制基数 | 判断及操作 | 结果 |
100 | 128 | b7=? | |
64 | b6=? | ||
32 | b5=? | ||
16 | b4=? | ||
8 | b3=? | ||
4 | b2=? | ||
2 | b1=? | ||
1 | b0=? |
操作如下,从第一行开始,做判读和操作,并确定改行结果,最终得到100=
数值 | 二进制基数 | 判断及操作 | 结果 |
100 | 128 | 100<128,所以b7=0,100不变填下行 | b7=0 |
100 | 64 | 100>=64,所以b6=1,并将100-64结果填下行 | b6=1 |
36 | 32 | 36>=32,所以b5=1,并将36-32结果填下行 | b5=1 |
4 | 16 | 4<16,所以b4=0,4不变填下行 | b4=0 |
4 | 8 | 4<8,所以b3=0,4不变填下行 | b3=0 |
4 | 4 | 4>=4,所以b2=1,并将4-4结果填下行 | b2=1 |
0 | 2 | 数值为0,后面结果都为0 | b1=0 |
0 | 1 | b0=0 |
将十进制整数-100转为二进制表示,
数值 | 二进制基数 | 判断及操作 | 结果 |
-100 | -128 | -100>=-128,所以b7=1,将-100-(-128)填下行 | b7=1 |
28 | 64 | 28<64,所以b6=0,28不变填下行 | b6=0 |
28 | 32 | 28<32,所以b5=0,28不变填下行 | b5=0 |
28 | 16 | 28>=16,所以b4=1,并将28-16结果填下行 | b4=1 |
12 | 8 | 12>=8,所以b3=1,并将12-8结果填下行 | b3=1 |
4 | 4 | 4>=4,所以b2=1,并将4-4结果填下行 | b2=1 |
0 | 2 | 数值为0,后面结果都为0 | b1=0 |
0 | 1 | b0=0 |
练习3 将56和-56表示成二进制?
练习4 思考156可以用8bit有符号二进制表示吗?
答案1
答案2
答案3
56=
数值 | 二进制基数 | 判断及操作 | 结果 |
56 | 128 | 56<128,所以b7=0,不变填下行 | b7=0 |
56 | 64 | 56<64,所以b6=0,不变填下行 | b6=0 |
56 | 32 | 56>=32,所以b5=1,并将56-32结果填下行 | b5=1 |
24 | 16 | 24>=16,所以b4=1,24-16填下行 | b4=1 |
8 | 8 | 8.>=8,所以b3=1,8-8填下行 | b3=1 |
0 | 4 | 数值为0,后面结果都为0 | b2=0 |
0 | 2 | b1=0 | |
0 | 1 | b0=0 |
-56=
数值 | 二进制基数 | 判断及操作 | 结果 |
-56 | -128 | -56>=-128,所以b7=1,-56-(-128)填下行 | b7=1 |
72 | 64 | 72>=64,所以b6=1,72-64填下行 | b6=1 |
8 | 32 | 8<32,所以b5=0,不变 | b5=0 |
8 | 16 | 8<16,所以b4=0,不变 | b4=0 |
8 | 8 | 8.>=8,所以b3=1,8-8填下行 | b3=1 |
0 | 4 | 数值为0,后面结果都为0 | b2=0 |
0 | 2 | b1=0 | |
0 | 1 | b0=0 |
答案4 不可以,因为8bit有符号只能表示范围-128到127,156>127超出范围。
来源:CSDN
作者:MichaelNZ
链接:https://blog.csdn.net/zhb_sh/article/details/104588908