Qt 十进制与十六进制转换 您所在的位置:网站首页 10000的十六进制 Qt 十进制与十六进制转换

Qt 十进制与十六进制转换

2024-07-09 09:53| 来源: 网络整理| 查看: 265

十进制与十六进制转换(带符号) 负数用十六进制表示,首先应该将其表示成二进制形式,然后变反码,再变补码。

-10——> 原码 1000 1010 ——> 反码 1111 0101 (原码按位反转) ——> 补码 1111 0110(反码+1) 补码变为十六进制表示是 0xF6 另外附上原码、反码、补码的一些小知识。

1. 原码

原码就是符号位加上真值的绝对值, 即第一位表示符号位, 其余位表示值. 比如8位二进制:

[+1]原 = 0000 0001 [-1]原 = 1000 0001

第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:

[1111 1111 , 0111 1111]==>[-127 , 127] 2. 反码

反码的表示方法是:

     1.正数的反码是其本身

     2.负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

[+1] = [00000001]原 = [00000001]反 [-1] = [10000001]原 = [11111110]反 3. 补码

补码的表示方法是:

正数的补码就是其本身负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1) [+1] = [00000001]原 = [00000001]反 = [00000001]补 [-1] = [10000001]原 = [11111110]反 = [11111111]补

我们知道,原码最大的问题就在于一个数加上他的相反数不等于零。

例如:   0001+1001=1010 (1+(-1)=-2)

     0010+1010=1100 (2+(-2)=-4)

也就是说,计算两个数需要辨别符号未,但计算机辨别"符号位"会让计算机的基础电路设计变得十分复杂! 于是人们想出了将符号位也参与运算的方法.

为了解决原码做减法的问题, 出现了反码:

1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0

发现用反码计算减法, 结果的真值部分是正确的. 而唯一的问题其实就出现在"0"这个特殊的数值上. 虽然人们理解上+0和-0是一样的, 但是0带符号是没有任何意义的. 而且会有[0000 0000]原和[1000 0000]原两个编码表示0.

于是补码的出现, 解决了0的符号以及两个编码的问题:

1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原

这样0用[0000 0000]表示, 而以前出现问题的-0则不存在了.而且可以用[1000 0000]表示-128:

(-1) + (-127) = [1000 0001]原 + [1111 1111]原 = [1111 1111]补 + [1000 0001]补 = [1000 0000]补



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有