码迷,mamicode.com
首页 > 其他好文 > 详细

计算机基础

时间:2019-06-07 12:37:44      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:运算   计算机   取值   一个   不用   表示法   字节   符号   计算   

一,int类型在内存是如何存储的?

数据类型  占用字节数  取值范围

 int       4byte    -2^31 ~ 2^31-1

unsigned int   4byte    0 ~2^32

1,占用的比特位数

int占用4个字节,每个字节有8个比特位,所以有32个 0-1 的二进制位数。注意:int类型有正负号,unsigned int 没有正负,所以int要用一位来标识正负

2,符号的表示方法

int类型占用的比特位中,左起第一个位(最高位)就是符号位。0表示正数,1表示负数。其余后面31是数值位。

3,数字0怎么表示?

3.1,因为有了正负数,那么就会有 +0 和 -0 。(注意:0有了两种表示:+0,-0)

  +0的表示方法:0000 0000 0000 0000 0000 0000

  -0的表示方法:-2^31

  0就用 +0 的表示方法

3.2,正数部分 2^31-1 ,之所以要减一,就是因为数字0占用了 +0 。负数不需要表示0,-0 就用来表示 -2^31

3.3,int类型的数字 -1 ,在内存中32个比特位上该如何表示?

10000000 00000000 00000001   左边第一个1表示负号,后面31位表示数值部分“1”。---->然而,并不是这样的

二,补码

计算机中的符号数有三种表示方法:原码,反码,补码。这三种表示方法都有符号位和数值位两部分,符号位用 0 表示正,用1 表示负,但是数值的表示,这三个就不相同了。

1,原码

原码是计算机中一种对数字的二进制定点表示方法。原码表示法 最高位位是符号位,正数最高位是0,负数最高位是1。

如何用原码表示一个数?

  -1的表示:10000000 00000000 00000001

  +1的表示:00000000 00000000 00000001

为什么不用原码在内存中表示数值呢?

举个栗子:用8位二进制表示 1 和 -1,然后让这两个数做加法运算

十进制        原码

     1              0000 0001

   -1     1000 0001

结果(原码)   1000 0010

结果(十进制)     -2

这运算结果显然不对。计算机在计算时,加法计算的算法更加便捷,减法会先转为负数,再进行加法运算。所以,原码的符号位不能直接参与运算

总结:原码是有符号数的最简单的编码方式,便于输入输出,但是作为代码加减运算时比较复杂。所以计算机不采用这种编码方式存储符号数。

2,反码

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

正数 和 +0 ,他们的反码就是原码本身。对于8位二进制的 +1,原码,反码都是 0000 0001

负数 和 -0,符号位不变,其余位数逐位取反(1换成0,0换成1),对于8位二进制的-1,原码:1000 0001,反码:11111 1110

我们再来做一次运算:1+(-1)= 0

十进制        原码        反码

     1              0000 0001    0000 0001

   -1     1000 0001    1111 1110 

结果(反码)              1111 1111   

结果(原码)           1000 0000

结果(十进制)     -2        -0

计算结果是-0,而我们加法运算的结果是0。

问题:由于-0的存在,使得二进制和十进制的互换不是一一对应的关系。这样就需要计算机增加额外的物理硬件配合运算,所以已经抛弃了用反码存储数据

3,补码

补码就是基于反码的 -0 问题而出现的。补码的计算方法:

正数和 +0 的补码是原码,负数

 

   

 

计算机基础

标签:运算   计算机   取值   一个   不用   表示法   字节   符号   计算   

原文地址:https://www.cnblogs.com/inspred/p/10987936.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!