微信搜索superit|邀请体验:大数据, 数据管理、OLAP分析与可视化平台 | 赞助作者:赞助作者

再来讲讲不同数据类型的长度和范围的事情!

java aide_941 11℃

很多人都不懂字符长度和字符范围怎么的关系,全靠死记硬背,久了就又忘了,,其实他们都是有关系的,,下面我来专门讲讲,,

 

1.计算机是美国人发明创造的,所以基本常用字符是依赖美国人发明的asiic码的(文章最后),共128个字符,这128个字符,每个字符都是占8位的二进制,记住!!!!大多数语言开发都是标准的asiic ,utf-8字符集

 


一个字节就是8位的二进制, 就是上面这个图的范围,

默认第1位是符号位,记住!!!, 所以还剩7位,  所以8位的二进制能容纳的范围就是-2^7  ~  2^7-1: -128-127,

所以1个字节它不管怎么样还是只能表示256个数,因为有符号所以我们就把它表示成范围:-128-127。

如果设置成无符号类型, 那就是8位全用来表示字符,就是可以代表: 0  ~  2^8-1,  0-256 个字符

用最高位表示符号位,如果是0表示正数,如果是1表示负数,,记住!!!

 

2.二进制的一个字符在磁盘上的存储方式,它在计算机中是怎么储存的呢?

2.1.数据在计算机底层是以二进制来存储的。而且就是按照数据的补码来存储的。(数据分为:原码、反码、补码)

2.2、对于正数来讲:原码、反码、补码都是相同的。

对于负数来讲:其补码可以看做是其相反数的各个位取反后,再+1得到  !!!  重要的数学逻辑!!! 计算的时候要有的!!

首先定义0在计算机中储存为00000000对于正数我们依然可以像无符号数那样换算,从00000001到01111111依次表示1到127。那么这些数对应的二进制码就是这些数的原码。

到这里很多人就会想,那负数是不是从10000001到11111111依次表示-1到-127,那你发现没有,如果这样的话那么一共就只有255个数了,因为10000000的情况没有考虑在内。

实际上,10000000在计算机中表示最小的负整数,就是这里的-128,而且实际上并不是从10000001到11111111依次表示-1到-127,而是刚好相反的,从10000001到11111111依次表示-127到-1。!!!重要

!!!!!!!上面说这么多, 核心意思就是下面!!!!!

因为: 00000000  表示 0 原码

因为: 00000001   表示 1 原码

而假如10000001  表示  -1,,那如何取反得到 00000001  ??  在二进制里面电路里面, 做不到!!,,电路里面取反就是开和关

而如果11111111 表示 -1 则 可以直接取反 得 0000000 然后+1 , 得到 00000001 直接就表示 -1 了

!!!!!!!划重点

2.3打开看二进制文件

在这里插入图片描述

2.4 真实的存储, 另外看这里:  二进制在数据磁盘的真实的存储!

 

3.下面讲讲不同的开发语言和不同的软件里的数据类型的长度

根据上面asiic码,不同国家或者软件开发组织,或者可以说不同的开发语言或者软件,里面采用的字符集不一样,,一个字符长度可能用不同的字节个数,但最后都转化为二进制!!!! 也就是说而对于不同软件里面有不同的数据类型的字符,,最终大多数的也都转化成为的二进制!!

于是那为何不一开始就用<<标准默认的数据类型>>来设计软件或者开发语言??

举个例子:

python约定的数据类型的长度

java的约定的数据类型的长度,看看Java基本数据类型转换byte字节数组,, 

boolean对应Boolean、byte对应Byte、short对应Short、int对应Integer、long对应Long、char对应Character、float对应 Float、double对应Double,8种包装类都提供了一个parseXxx(String str)静态方法用于将字符串转换成基本类型

QQ约定的某个表情对应的字符集长度

4.再来讲讲<<默认的标准数据类型>>的长度和范围的事情!

以mysql为例子:
int 4个字节,每个字节8位,所以一个int类型数据,可以存储 4*8=32,,,所以是-2^32 ~ 2^32-1 位, 所以

float 占4个字节.

double 占8个字节

 

  1. 所谓的占用字节数 就是申请内存的时候所占的空间大小,,,

byte  1字节  1*8-1 =7, 这里-1是首位的符号

最小值是 -128(-2^7);
最大值是 127(2^7-1);

boolean    至少1字节

这种类型只作为一种标志来记录 true/false 情况;

short    2字节    2*8-1 =15, 这里-1是首位符号的位置

最小值是 -32768(-2^15);
最大值是 32767(2^15 – 1);

char    2字节    2*8-1 =15, 这里-1是首位符号的位置

最小值是 \u0000(即为0);
最大值是 \uffff(即为65,535);

int    4字节    4*8-1 =31, 这里-1是首位符号的位置

最小值是 -2,147,483,648(-2^31);
最大值是 2,147,483,647(2^31 – 1);

float    4字节    单精度浮点数字长32位,尾数长度23,指数长度8,指数偏移量127;
long    8字节      8*8-1 = 63, 这里-1是首位符号的位置

最小值是 -9,223,372,036,854,775,808(-2^63);
最大值是 9,223,372,036,854,775,807(2^63 -1);

double    8字节    双精度浮点数字长64位,尾数长度52,指数长度11,指数偏移量1023;
decimal  (m, d)  最长不超过m,,小数点后长度d,,
英文字母:

字节数 : 1;编码:GB2312
字节数 : 1;编码:GBK
字节数 : 1;编码:ISO-8859-1
字节数 : 1;编码:UTF-8

中文汉字:

字节数 : 2;编码:GB2312
字节数 : 2;编码:GBK
字节数 : 1;编码:ISO-8859-1
字节数 : 3;编码:UTF-8

 

6.java里的8种基础数据类型:

非基本类型BigDecimal引用的对象占用的字节数是可变的

  1. mysql里面约定的数据类型的长度!

 

ASCII 编码一览表(淡黄色背景为控制字符,白色背景为可显示字符)
二进制     十进制    十六进制  字符/缩写  解释
00000000    0   00  NUL (NULL)  空字符
00000001    1   01  SOH (Start Of Headling) 标题开始
00000010    2   02  STX (Start Of Text) 正文开始
00000011    3   03  ETX (End Of Text)   正文结束
00000100    4   04  EOT (End Of Transmission)   传输结束
00000101    5   05  ENQ (Enquiry)   请求
00000110    6   06  ACK (Acknowledge)   回应/响应/收到通知
00000111    7   07  BEL (Bell)  响铃
00001000    8   08  BS (Backspace)  退格
00001001    9   09  HT (Horizontal Tab) 水平制表符
00001010    10  0A  LF/NL(Line Feed/New Line)   换行键
00001011    11  0B  VT (Vertical Tab)   垂直制表符
00001100    12  0C  FF/NP (Form Feed/New Page)  换页键
00001101    13  0D  CR (Carriage Return)    回车键
00001110    14  0E  SO (Shift Out)  不用切换
00001111    15  0F  SI (Shift In)   启用切换
00010000    16  10  DLE (Data Link Escape)  数据链路转义
00010001    17  11  DC1/XON(Device Control 1/Transmission On)   设备控制1/传输开始
00010010    18  12  DC2 (Device Control 2)  设备控制2
00010011    19  13  DC3/XOFF(Device Control 3/Transmission Off) 设备控制3/传输中断
00010100    20  14  DC4 (Device Control 4)  设备控制4
00010101    21  15  NAK (Negative Acknowledge)  无响应/非正常响应/拒绝接收
00010110    22  16  SYN (Synchronous Idle)  同步空闲
00010111    23  17  ETB (End of Transmission Block) 传输块结束/块传输终止
00011000    24  18  CAN (Cancel)    取消
00011001    25  19  EM (End of Medium)  已到介质末端/介质存储已满/介质中断
00011010    26  1A  SUB (Substitute)    替补/替换
00011011    27  1B  ESC (Escape)    逃离/取消
00011100    28  1C  FS (File Separator) 文件分割符
00011101    29  1D  GS (Group Separator)    组分隔符/分组符
00011110    30  1E  RS (Record Separator)   记录分离符
00011111    31  1F  US (Unit Separator) 单元分隔符
00100000    32  20  (Space) 空格
00100001    33  21  !    
00100010    34  22  "    
00100011    35  23  #    
00100100    36  24  $    
00100101    37  25  %    
00100110    38  26  &    
00100111    39  27  '    
00101000    40  28  (    
00101001    41  29  )    
00101010    42  2A  *    
00101011    43  2B  +    
00101100    44  2C  ,    
00101101    45  2D  -    
00101110    46  2E  .    
00101111    47  2F  /    
00110000    48  30  0    
00110001    49  31  1    
00110010    50  32  2    
00110011    51  33  3    
00110100    52  34  4    
00110101    53  35  5    
00110110    54  36  6    
00110111    55  37  7    
00111000    56  38  8    
00111001    57  39  9    
00111010    58  3A  :    
00111011    59  3B  ;    
00111100    60  3C  <     
00111101    61  3D  =    
00111110    62  3E  >     
00111111    63  3F  ?    
01000000    64  40  @    
01000001    65  41  A    
01000010    66  42  B    
01000011    67  43  C    
01000100    68  44  D    
01000101    69  45  E    
01000110    70  46  F    
01000111    71  47  G    
01001000    72  48  H    
01001001    73  49  I    
01001010    74  4A  J    
01001011    75  4B  K    
01001100    76  4C  L    
01001101    77  4D  M    
01001110    78  4E  N    
01001111    79  4F  O    
01010000    80  50  P    
01010001    81  51  Q    
01010010    82  52  R    
01010011    83  53  S    
01010100    84  54  T    
01010101    85  55  U    
01010110    86  56  V    
01010111    87  57  W    
01011000    88  58  X    
01011001    89  59  Y    
01011010    90  5A  Z    
01011011    91  5B  [    
01011100    92  5C  \    
01011101    93  5D  ]    
01011110    94  5E  ^    
01011111    95  5F  _    
01100000    96  60  `    
01100001    97  61  a    
01100010    98  62  b    
01100011    99  63  c    
01100100    100 64  d    
01100101    101 65  e    
01100110    102 66  f    
01100111    103 67  g    
01101000    104 68  h    
01101001    105 69  i    
01101010    106 6A  j    
01101011    107 6B  k    
01101100    108 6C  l    
01101101    109 6D  m    
01101110    110 6E  n    
01101111    111 6F  o    
01110000    112 70  p    
01110001    113 71  q    
01110010    114 72  r    
01110011    115 73  s    
01110100    116 74  t    
01110101    117 75  u    
01110110    118 76  v    
01110111    119 77  w    
01111000    120 78  x    
01111001    121 79  y    
01111010    122 7A  z    
01111011    123 7B  {    
01111100    124 7C  |    
01111101    125 7D  }    
01111110    126 7E  ~    
01111111    127 7F  DEL (Delete)    删除

 

转载请注明:SuperIT » 再来讲讲不同数据类型的长度和范围的事情!

喜欢 (0)or分享 (0)