首先,我们直观看,
w(8)位有符号的值范围为 -2(w - 1) ~ 2(w - 1) - 1 = -128 ~ 127;
w(8)位无符号的值范围2(w) - 1 = 255;
2(w) / 2(w - 1) = 2
2(5) / 2(5 - 1) = 2(5) / 2(4) = (2 * 2 * 2 * 2 * 2) / (2 * 2 * 2 * 2) = 2
v = -12345 (有符号)
有符号数补码我们之前已经讲过相关的转换步骤了
既先取绝对
值的原码,再按位取反 ,再加1
|-12345| =0X3039 十进制转16 用除16 以余作16进制有效位 ,最先的余数有效位最低,最后的有效位最高,每次的商接着除16,一直到最未余数。
(128,64,32,16,((8,4,2,1))将-12345原码的二进制0011 0000 0011 1001 反码取反是1100 1111 1100 0110 然后再加1 是 1100 1111 1100 0111 既-12345有符号数的补码
原码: 0011 0000 0011 1001(十六进制为:0X3039,十进制为: 3 * 16(3) + 0 * 16(2) + 3 * 16(1) + 9 * 16(0)) = 3 * 4096 + 0 + 48 + 9 *1 = 3 * 4096 + 57= 12345
反码: 1100 1111 1100 0110(十六进制为0XcFc6,十进制为:12 * 16(3)+15 *16(2)+12 * 16(1)+6 * 16(0)) = 12 * 4096 + 15 * 256 + 12 * 16 + 6 = 201388230
反码+ 1 1100 1111 1100 0111()
我们再来看下w = 16时 ,无符号,有符号可存储的数值范围:
无符号2(16) - 1 = 65535
有符号 -2(16 - 1) ~ 2(16 - 1) - 1 为,-32768 ~ 32767
十进制,二进制 ,十六进制
一般 十进制转换成二进制,我一般是讲 十进制先先转成十六进制,再讲十六进制转换成二进制,因为 二进制和十六进制之间的转换很好换算 ,一个十六进制转成4个二进制,同样的4个二进制转成1个十六进制.
至此我们主要接触的相对新手较难的知识点有移位,有符号补码,无符号补码规则。
其实无符号,有符号 对于这两个名词我们从汉字理解就能看出些头绪 无符号就是 所有的符号都表示数据,有符号呢就是 最高的有效位为符号位
当最高有效位为1时,表示的数据为负数,当最高有效位为0时,表示的数据为 非负.
就是有符号位的最高有效位既符号位为0时,此有符号数据既为无符号数
我们又讲到,正数的补码是它本身,负数的补码是值取反加1
有符号数是针对二进制来讲的。用最高为作为符号位,"0"代表"+"
"1" 代表"-" 其余数位作数值位,代表数值。
无符号就是没有符号位,所有位都表示数值
有符号位就是就符号位,最高位为符号位 最高位 为1 时 "-"
如果有符号数的最高位为1 则将有符号数取补码得到的就是无符号
有符号数最高位符号位为1是,讲有符号数据取补码,得到的就算无符号数
有符号数转换成无符号 看 有符号数的 最高位是否为1,如果不为1(既为0) 则有符号数据直接就算无符号数
有符号 -> 无符号 ,如果有符号数最高有效位符号位为0 则有符号数据直接就算无符号数据
如果有符号数据最高有效位为1 ,则将有符号数据取补码 得到的数就算无法和
如果无符号最高位1 ,则将无符号数提取补码 ,得到有符号