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

原创 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。这意味着这个负数被我们强制转成了我们和计算机都认可的整数。


尾声

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

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

相关文章推荐

c语言int表示范围以及移位运算符

刚刚看到的几个小基础知识,记录一下: 在int型为32位的硬件环境中,int的表示范围是:-2的31次方  到   2的31次方减1。 原因:因为int是带符号类型,所以最高位为符号位,于是最大表示的...
  • rxm1989
  • rxm1989
  • 2014年09月25日 13:32
  • 599

Java数据类型和位运算

一、数据类型 其中基本数据类型为: 注意:byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。 其中                            ...

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

1摘要本文简单介绍了进制,C语言中基本数据类,位运算。

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

一、Java中的基本数据类型平日里开发过程中,总是会遇到基本数据类型在内存中占几个字节的类似疑问,一直想把这些基础的知识整理一下,总是偷懒,于是今天便总结了一下,如果下面的文章哪里有问题,欢迎在评论中...

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

常见数值的补码  数值 补码  0 0000 0000  1 0000 0001   -1 ...

定义一个不受计算机字长限制的整数类INT,要求INT与INT以及INT与C++基本数据类型int之间能进行+、-、×、÷和=运算,并且能通过cout输出INT类型的值。(持续添加)

题目要求:定义一个不受计算机字长限制的整数类INT,要求INT与INT以及INT与C++基本数据类型int之间能进行+、-、×、÷和=运算, 并且能通过cout输出INT类型的值。 一直就在构...

整数的二进制表示与位运算

  • 2017年07月22日 10:51
  • 120KB
  • 下载

OpenCV基本数据类型表示的范围大小

OpenCV基本数据类型表示的范围大小
  • zhanpl
  • zhanpl
  • 2017年04月20日 10:06
  • 410

C++各种数据类型表示范围

转自:http://www.cnblogs.com/maowang1991/p/3166928.html #include #include #include using namespace s...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:整数数据类型表示范围与位运算
举报原因:
原因补充:

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