关于 数据类型byte的取值范围 浅析

本文介绍了计算机中数据的存储方式,重点讲解了byte类型的取值范围。通过原码、反码、补码的概念,阐述了为什么byte类型的负数取值范围比正数多1,详细分析了从-128到127的计算过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

计算机存储方式

1.数据在计算机中以二进制的形式存储在计算机中 ,

2.如何存储数字
我们平时所说的数值一般都是进制的,但计算机只能存储0和1,所以需要将10进制的数转为二进制让计算机进行储存。
但也有一些特殊情况,如果想存 -3 就需要使用补码(计算机无法存储负号);如果想存 0.75 就需要使用浮点数(计算机无法存储小数点)。
3.如何存储字符

字符存储和数字的存储有着相似的过程,通过ASCII表,我们可以查询到字符对应的二进制数。

4.如何存储中文

和存储字符类似,中文也有对应的CODE值来进行存储,将16进制的CODE值转为二进制,计算机就可以存储了。详见GBK表
5.进制转换

1.十进制转换为二进制
方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。
例如:十进制 转换为二进制为:3------- 11 ; 11------1011
2.二进制转换为十进制
方法为:把二进制数按权展开、相加即得十进制数。
计算机中表示形式
0000 0011 -------3
1000 1011 ------- -11
注意:第一位是符号位 0为正数 1为负数,最后一位是最底位

《 计算机组成原理中》的原码,补码,反码的概念

原码:早期用来表示数字的一种方式: 一个正数,转换为二进制位就是这个正数的原码。负数的绝对值转换成二进制位然后在高位补1就是这个负数的原码
 举例说明:

int类型的 3 的原码是 11B(B表示二进制位), 在32位机器上占四个字节,那么高位补零就得:

00000000 00000000 00000000 00000011

int类型的 -3 的绝对值的二进制位就是上面的 11B 展开后高位补零就得:

10000000 00000000 00000000 00000011

但是原码有几个缺点,零分两种 +0 和 -0 。很奇怪是吧!还有,在进行不同符号的加法运算或者同符号的减法运算的时候,不能直接判断出结果的正负。你需要将两个值的绝对值进行比较,然后进行加减操作 ,最后符号位由绝对值大的决定。于是反码就产生了。
      
**反码:正数的原码就是反码, 负数的反码是 原码除符号位以外 按位取反
举例说明:

int类型的 3 的反码是

00000000 00000000 00000000 00000011

和原码一样没什么可说的

int类型的 -3 的反码是

11111111 11111111 11111111 11111100

除开符号位 所有位 取反

解决了加减运算的问题,但还是有正负零之分,然后就到补码了

补码:计算机实际存储数据的方式,正数原码就是补码 负数补码有两种方式求得:
a):原码除符号位外所有位取反(得到反码了),然后最低位加1.
b)先取负数的原码的绝对值的原码,再将该原码包括符号位 均 按位取反 在最底位加1

还是举例说明:

int类型的 3 的补码是:

00000000 00000000 00000000 00000011

int类型的 -3 的补码是

11111111 11111111 1111111 11111101

就是其反码加1

下面以 byte类型为例 讲解 数据类型的取值范围 为什么总是 负数比正数的取值范围多1?
  1. 数据类型:byte
  2. 字节数:1B(8bit)
  3. 十进制取值范围:-128~127 (-27-1~27

byte 取值范围:    -128 ~ 127
01111  1111   ------最大正数为127(+2^7)
0000   0001    -------- 对应最小正数1

0000 0001 ~0111 1111 代表正数 1~127取值范围
------------------------
11111  1111    对应最小负数为 -127
1000  0001    对应最大负数为 -1

1000  0001 ~0111 1111 代表负数 -1~-127范围
------------------------
其中有两个特殊的规定值
0000 0000     代表数字 0
1000 0000     代表数字 -128

解释:字长为8位时,(-128)没有相对应的原码和反码, 所以规定 1000 0000 代表数字-128
-128的机器码原码是:1 1000 0000,反码1 0111 1111,补码1 1000 0000,截取低8位即1000 0000,表示的是一个负数 其数值是128
所以 byte取值最小为 -128。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值