常见的进制转换与有符号数据表示法

Posted ssh-html

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常见的进制转换与有符号数据表示法相关的知识,希望对你有一定的参考价值。

注:本内容参考与传智播客的Java内容的讲解,当然我整理了一下,做个记录~~~ 其中我认为很有价值的是有符号数据表示法,真正的去深入了解计算机,虽然我是一个渣渣~~~

所谓进制就是指:就是位进制,是人们规定的一种进位方法。对于任何一种进制 --X进制,就表示某一位置上的数运算时是逢X进一位。二进制就是逢二进一,八进制就是逢八进一,十进制就是逢十进一,十六进制就是逢十六进一。

一、常见的进制转换

技术分享图片

1、在Java中针对整数常量提供了四种表现形式
  (1)二进制 由0,1组成。以0b开头。
  (2)八进制 由0,1,...7组成。以0开头。
  (3)十进制 由0,1,...9组成。整数默认是十进制。
  (4)十六进制 由0,1,...9,a,b,c,d,e,f(大小写均可)组成。以0x开头。

2、进制转换

(1)其他进制到十进制(系数*基数^权)

  系数:就是每一个位上的数值

  基数:x进制的基数就是x

  权:对每一个位上的数据,从右,并且从0开始编号,对应的编号就是该数据的权。

例子:

0b10101 (这个数是二进制的一个数,因为是以0b开头的)

=1*2^4 + 1*2^2 + 1*2^0

=16 + 4 + 1

=21

0123(这个数是八进制的一个数,因为是以0开头的)

=1*8^2 + 2*8^1 + 3*8^0

=64 + 16 + 3

=83

0x3c(这个数是十六进制的一个数,因为是以0x开头的)

=3*16^1 + c*16^0

=48 + 12

=60

(2)十进制到其他进制的转换

  除基取余,直到商为0,余数反转。

例子:

52分别得到二进制,十进制,十六进制

得到二进制:

52 / 2 = 260

26 / 2 = 130

13 / 2 = 6                 1

6  / 2 = 3                  0

3  / 2 = 1                  1

1  / 2 = 0                  1

0b110100

得到八进制:

52 / 8 = 64

6  / 8 = 0          6

064

得到十六进制:

52 / 16 = 3       4

3  / 16 = 0 3

0x34

3、进制转换的快速转换法

(1)十进制和二进制间的转换

8421码。

(2)二进制到八进制,十六进制的转换

技术分享图片

二、有符号数据表示法

在计算机内,有符号数据有三种表示法:原码、反码和补码。所有数据的运算都是采用补码进行的。

  原码:就是二进制定点表示法。即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。

  反码:正数的反码与其原码相同,负数的反码是对其原码逐位取反,符号位除外。

  补码:正数的补码与其原码相同,负数的补码是在其反码的末位加1。

技术分享图片

例子:

1)已知某数X的原码为10110100B,试求X的补码和反码。

符号位数值位

原码:10110100

反码:11001011

补码:11001100

 

2)已知某数X的补码11101110B,试求其原码。

符号位数值位

补码:11101110

反码:11101101

原码:10010010





以上是关于常见的进制转换与有符号数据表示法的主要内容,如果未能解决你的问题,请参考以下文章

九进制转换

20145339《信息安全系统设计基础》第3周学习总结

数据的进制转换以及算术逻辑运算

C语言转换格式符大全?

C ++将十六进制字符串转换为有符号整数

进制转换