整数数据类型表示范围与位运算

原创 2016年06月01日 20:39:13

前言

本文仅讨论Java中整数数据类型byte、short、int、long,boolean、char、float、double不在讨论之列。因为浮点数极少用到位运算,boolean类型极少用来进行数值运算,char一般用来操作字符,很少用来参与数值运算,而且可以使用short代替。

1、基本数据类型表示范围

http://xixian.iteye.com/blog/1117432

2、数据类型转换

在Java中这几种基本数据采用补码的形式表示,因此第一个比特均为符号位。而且没有无符号数。

当进行byte -> short -> int -> long转换时,会自动进行字节扩展,并且在高位补上符号位所对应的数。(补码)

如:10001110(byte) -> 11111111 10001110(short)

这样做的好处是在进行正常的向上转换发生时,数本身大小不会被改变,符号也不会发生改变。

当进行long ->int -> short ->byte转换时,会自动去掉高位字节,因此如果原来的数超过了转换后的类型的范围,那么数据的部分信息就会丢失。

而如果在这个范围内,那么转换后数本身不会发生任何变化。

3、位运算

Java没有提供无符号数。但是在进行位运算时我们常常忽略符号位。比如byte类型,我们常常认为8位都是数据,可以表示0~256而不是-128~127。

如果定义了一个数:

byte b = 0xff;

如果这个数为正数或0,这不会出任何问题,因为正数的补码还是自身。

但是就像上面的b一样,我们也许是想表示它为256,即我们认为它是原码的表示形式。但是计算机或者说我们的JVM不这么认为,0xff将被认作补码,

因此这个数将被认作-1(如果我们将它转成int输出的时候)。

在这种情况下,如果我们想保持它的值,那么直接使用强制类型转换就难以胜任了。为此我们可以使用位运算来解决这个问题。

int r = b & 0xff;

使用上面这条语句,那么低字节上的数将被保留,而高字节被置零而不是符号位1。这意味着这个负数被我们强制转成了我们和计算机都认可的整数。


尾声

位运算本身代码不难,难点在于是否可以想清楚其中的逻辑关系。可以先用笔在纸上简单计算一下,在转换成代码,事半功倍。

版权声明:欢迎转载,请标注转载地址,谢谢!。

各种数据类型表示范围

以前整理的找不到了,这次好好整理一下吧 一、基本类型的大小及范围的总结(以下所讲都是默认在32位操作系统下): 字节:byte;位:bit。 1.短整型short:所占内存大小:2byte=16bi...
  • u014665013
  • u014665013
  • 2015年01月19日 18:52
  • 1800

C++ int、long、double、char所占字节数和表示范围

数据范围
  • SenyeLicone
  • SenyeLicone
  • 2016年08月03日 21:55
  • 2311

C语言中各种数据类型中所占的字节和取值范围

问题:C语言数据类型取值范围,是根据什么定义这个范围取值? 首先,在计算机中所有数据都是用一个一个的二进制位(0或1)存储的,单位称为:位(bit); 然后,每8位二进制数(比如01010001)...
  • lianghui0811
  • lianghui0811
  • 2015年09月25日 17:49
  • 7071

java中的byte类型的取值范围是-128~127

概念:负数的补码是该 数 绝 对 值 的 原 码 按 位 取 反 ,然 后 对 整个数 加 1 步骤: 1.确定byte是1个字节,也就是8位 2.最大的应该是0111 1111,因...
  • aoerqileng
  • aoerqileng
  • 2014年11月20日 11:27
  • 2092

int,long,long long类型的数值范围

int ,long ,long long 等各种数据类型的范围
  • qianbitou000
  • qianbitou000
  • 2016年07月18日 09:15
  • 14507

JAVA位运算、进制转换、byte数组转换、JAVA数据类型取值范围

位运算 ~ 按位非(NOT) & 按位与(AND) | 按位或(OR) ^ 按位异或(XOR) >> 右移 >>> 无符号右移 进制转换 16进制0x   8进制0   切记是数字0...
  • xxdw1992
  • xxdw1992
  • 2017年12月18日 09:44
  • 105

C语言基础—进制 基本数据类型的存储 位运算

1摘要本文简单介绍了进制,C语言中基本数据类,位运算。
  • dqw18037
  • dqw18037
  • 2015年05月12日 22:28
  • 301

Java数据类型和位运算

一、数据类型 其中基本数据类型为: 注意:byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。 其中                            ...
  • oChangWen
  • oChangWen
  • 2016年01月26日 18:06
  • 1587

利用位运算计算某种数据类型的最大值和最小值

常见数值的补码  数值 补码  0 0000 0000  1 0000 0001   -1 ...
  • giselite
  • giselite
  • 2013年03月28日 19:54
  • 1202

Java基本数据类型与位运算、原码&补码&反码

一、Java中的基本数据类型平日里开发过程中,总是会遇到基本数据类型在内存中占几个字节的类似疑问,一直想把这些基础的知识整理一下,总是偷懒,于是今天便总结了一下,如果下面的文章哪里有问题,欢迎在评论中...
  • yongxiHU
  • yongxiHU
  • 2017年04月30日 15:34
  • 249
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:整数数据类型表示范围与位运算
举报原因:
原因补充:

(最多只允许输入30个字)