关于 数据类型的存储方式和取值范围 浅析
计算机存储方式
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?
- 数据类型:byte
- 字节数:1B(8bit)
- 十进制取值范围:-128~127 (-27~27-1)
byte 取值范围: -128 ~ 127
01111 1111 对应最大正数数为127
0000 0001 对应最小正数1
0000 0001 ~0111 1111 代表 1~127取值范围
------------------------
11111 1111 对应最小负数为 -127
1000 0001 对应最大负数为 -1
------------------------
剩余:
0000 0000 代表数字 0
1000 0000 代表数字 -128
解释:字长为8位时,(-128)没有相对应的原码和反码, (-128) = (10000000)
-128的机器码原码实际是:110000000,反码101111111,补码110000000,截取低8位即10000000,表示的是一个负数。
- CSS魔法堂:重拾Border之——图片作边框
- Mobile Web中URL设计问题
- 使用root用户连接Ubuntu16.04时,提示SSH连接被拒绝
- CSS魔法堂:Box-Shadow没那么简单啦:)
- java操作redis: 将string、list、map、自定义的对象保存到redis中
- 运行第一个Docker容器-Docker for Web Developers(1)
- 手动实现jQuery Tools里面tab功能
- Angular企业级开发(9)-前后端分离之后添加验证码
- 基于thrift的微服务框架
- Sublime Text 快速格式化
- HTML中拖放介绍
- 打造高效前端工作环境 - tmux
- 基于thrift的微服务框架
- thrift中的超时(timeout)坑
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法