byte或short类型在左移时应注意的问题
2010-10-17 08:54
148 查看
package com.kkoolerter.jdk;
/**
* 位移(ByteShift)
* @author Jenson
*
*/
public class ByteShift {
public static void main(String[] args) {
byte a = 64,b;
int i = a << 2;
b = (byte)(a<<2);
System.out.println("a的原始值:a="+a);
System.out.println("i="+i+",b="+b);
/*
*这个程序段说明了Java在对shot的byte类型进行位移时,将会产生出人
*意料的结果。因为对一个表达式求值 时,byte和short将自动 提升为int
*类型,表达式结果也是一个int类型。也就是byte或short值向左移位的
*结果是一个int,但移到左边的位超过了第31位将丢失。此外,负的byte
*或short值在提升为int时,其符号将扩展,高阶位将用1来填充。为此
*在一个byte或short上执行一个左移则会丢弃int结果的最高阶位。例如,
*如果左移一个byte值,该值首先被提升为int,然后再在int上执行一个
*左移。此时,如果需要的一个移位后的byte值,则必须丢弃结果中的前3
*个字节,方法是将结果强制转换为byte类型。
*/
}
}
本文出自 “有思想的代码” 博客,请务必保留此出处http://wujuxiang.blog.51cto.com/2250829/406794
/**
* 位移(ByteShift)
* @author Jenson
*
*/
public class ByteShift {
public static void main(String[] args) {
byte a = 64,b;
int i = a << 2;
b = (byte)(a<<2);
System.out.println("a的原始值:a="+a);
System.out.println("i="+i+",b="+b);
/*
*这个程序段说明了Java在对shot的byte类型进行位移时,将会产生出人
*意料的结果。因为对一个表达式求值 时,byte和short将自动 提升为int
*类型,表达式结果也是一个int类型。也就是byte或short值向左移位的
*结果是一个int,但移到左边的位超过了第31位将丢失。此外,负的byte
*或short值在提升为int时,其符号将扩展,高阶位将用1来填充。为此
*在一个byte或short上执行一个左移则会丢弃int结果的最高阶位。例如,
*如果左移一个byte值,该值首先被提升为int,然后再在int上执行一个
*左移。此时,如果需要的一个移位后的byte值,则必须丢弃结果中的前3
*个字节,方法是将结果强制转换为byte类型。
*/
}
}
本文出自 “有思想的代码” 博客,请务必保留此出处http://wujuxiang.blog.51cto.com/2250829/406794
相关文章推荐
- 类型转换问题(java会把byte,short和char的运算操作转换为int类型即低精度自动向高精度转换)
- java-int&short-byte类型转换问题
- char/byte/short类型的加法和类型转换问题
- 测试整数类型:byte,short,int,long。以及进制之间的转换问题
- Short类型的List contains(Byte.valueOf("1"))的问题
- int转为short的问题以及类型转换、按位与、相等优先级
- 1.使用try catch 捕获除0异常,并打印信息“不能除0”. * 2.将字符串“12.5” 转换为float类型 * 3.将int类型的127转换成 byte和short类型
- 查看byte,Short,lang,double,char类型的位数和大小的范围述
- 关于Java中byte,short,char,int 之间相互赋值的问题
- 双重循环_百钱买鸡问题(注意变量类型的转换)
- BigInteger与byte[]互转注意问题
- null可以转换成任意非基本类型(int/short/long/float/boolean/byte/double/char以外)
- Oracle数据类型Long需要注意的问题
- android(29)(显示意图与隐式意图,byte转换成int类型需注意的地方)
- java 获取若干小时之前的时刻 注意数据类型的范围问题
- ABAP中接收.NET语言byte[]类型返回值问题
- ORACLE 中 VARCHAR2 类型的字段长度是按照 byte 来定义的 一个容易被忽略的问题
- java中byte char short类型数据的操作说明
- 怎么在byte、short、char、int类型参数方法中重载
- 在Java中byte类型数据在运算的问题