㈠ java中byte的用法
byte最大范围是127你给个222它能吃的下嘛,它就给你来了个强制转换,就-34了
㈡ JAVA byte 赋值
位运算啊! 自己写个方法 /**对位赋值操作 参数: CtrlF:控制标志位(我觉得你应该是这个意思。) index:需要复制的标志位位置 value:需要付给的值 */ public void setCtrlF(byte CtrlF,int index,byte value){ if(value<0||value>1){ return;//出错,赋值非0,1。如果想要优雅点,你应该在这里抛出自己的异常。 } value<<index;//value左移index位 CtrlF= CtrlF ^ value;//异或value }
㈢ JAVA中怎么将int数据转换为byte数据
JAVA中根据以下代码将int数据转换为byte数据:
public static byte[] int32ToBytes(int val) {
int size = Integer.SIZE / Byte.SIZE;
byte[] ret = new byte[size];
for (int i = 0; i < size; ++i) {
ret[i] = (byte) (val << (8 * i) >> 56);
}
return ret;
}
(3)javabyte操作扩展阅读
Java也提供了一个byte数据类型,并且是基本类型。java byte是做为最小的数字来处理的,因此它的值域被定义为-128~127,也就是signed byte。
byte,即字节,由8位的二进制组成。在Java中,byte类型的数据是8位带符号的二进制数。在计算机中,8位带符号二进制数的取值范围是[-128, 127],所以在Java中,byte类型的取值范围也是[-128, 127]。
运算规则:
####正数的最高位都是 0 ,正数的值就是二进制表示的值。 ####
####负数的最高位都是 1 ,负数的值是 取反后加一 然后加个负号得到得值。 ####
㈣ java byte 赋值问题
首先 0xa9的值是 169 所以 a=169-127-128=-86 因为有0的位置 ,所以是-87
下面 Byte.decode,查看源码便可以知道
转成了integer,也就是 169 ,下面判断了 是否 在 -128到 127之间,很明显 ,不在 ,所以报错 !
㈤ java byte的作用
java byte代表字节,作用范围如下:
1.byte在java中是一种是数据类型,代表一个字节,一个字节包含8个位,所以,byte类型的取值范围为-128到127。
2.在某些程序中(尤其是和硬件有关的程序)会将某些数据存储到字节类型的变量中,比如00110010,其中每个位都代表一个参数,然后以位运算的方式对参数进行取值和赋值操作。
㈥ JAVA 位运算 (byte) (a << 2); 是什么意思
您好,你的问题,我之前好像也遇到过,以下是我原来的解决思路和方法,希望能帮助到你,若有错误,还望见谅!展开全部
你看下这篇文章就清楚了
首先要明白一点,这里面所有的操作都是针对存储在计算机中中二进制的操作,那么就要知道,正数在计算机中是用二进制表示的,负数在计算机中使用补码表示的。
左移位:<<,有符号的移位操作
左移操作时将运算数的二进制码整体左移指定位数,左移之后的空位用0补充
右移位:>>,有符号的移位操作
右移操作是将运算数的二进制码整体右移指定位数,右移之后的空位用符号位补充,如果是正数用0补充,负数用1补充。
例子:
public static void main(String[] args)
{
System.out.println(3<<2);//3左移2位
System.out.println(-3<<2);//-3左移2位
System.out.println(6>>2);//6右移2位
System.out.println(-6>>2);//-6右移2位
}
输出结果
12
-12
1
-2
下面解释一下:
00000000 00000000 00000000 00000011 +3在计算机中表示
00000000 00000000 00000000 0000001100 左移2位,补0,结果为12
----------------------------------------------------------------------------------------------
00000000 00000000 00000000 00000011 +3在计算机中表示
11111111 11111111 11111111 11111100
11111111 11111111 11111111 11111101 -3在计算机中表示
11111111 11111111 11111111 1111110100 左移2位,补0,结果为负数,就是补码了,求原码
10000000 00000000 00000000 00001011
10000000 00000000 00000000 00001100 结果-12
----------------------------------------------------------------------------------------------
这也说明了一个问题:在计算机中,以1开头的就是补码的形式,是负数。
00000000 00000000 00000000 00000110 +6在计算机中表示方法
0000000000 00000000 00000000 00000110 右移两位,正数补0,结果为1
----------------------------------------------------------------------------------------------
00000000 00000000 00000000 00000110 +6在计算机中表示方法
11111111 11111111 11111111 11111001
11111111 11111111 11111111 11111010 -6在计算机中的表示
1111111111 11111111 11111111 11111010 右移两位,结果为负数
1000000000 00000000 00000000 000001
1000000000 00000000 00000000 000010 结果为-2
这个地方很容易弄混,多想几次就会慢慢理解了。
上面解释了带符号的移位操作,下面解释一下不带符号的移位操作
无符号的移位只有右移,没有左移使用“>>>”进行移位,都补充0
例如:
public static void main(String[] args)
{
System.out.println(6>>>2);
System.out.println(-6>>>2);
}
结果:
1
1073741822
分析:
00000000 00000000 00000000 00000110 +6在计算机中表示方法
0000000000 00000000 00000000 00000110 右移两位,正数补0,结果为1
-----------------------------------------------------------------------------------------------------
00000000 00000000 00000000 00000110 +6在计算机中表示方法
11111111 11111111 11111111 11111001
11111111 11111111 11111111 11111010 -6在计算机中的表示
0011111111 11111111 11111111 11111010 右移两位,补充0,结果为1073741822
以下来自:
可以参考
移位操作要注意的问题是高(低)位是补0还是补1和对char, byte, short型的操作:
(1)<< : (left-shift), 最低位补0
(2)>> : (signed right-shift), 右移过程使用符号位扩展(sign extension),即如果符号为为1则高位补1, 是0则补0,也就是逻辑右移
(3)>>> : (unsigned right-shit),右移过程使用零扩展(zero extension),即最高位一律补0,也就是算术右移
(4)移位操作的数据类型可以是byte, char, short, int, long型,但是对byte, char, short进行操作时会先把它们变成一个int型,最后得到一个int型的结果,对long型操作时得到一个long型结果,不可以对boolean型进行操作。
(5)移位操作符可以和=合并起来,即 <<= 、 >>= 和 >>>=。例如 a >>= 2; 表示将a右移两位后的值重新赋给a。当时在使用这三个操作符对 byte, char, short型数据进行操作时要注意,例如有一下代码片段:非常感谢您的耐心观看,如有帮助请采纳,祝生活愉快!谢谢!
㈦ java里怎么对Byte进行位操作
//byte buf[]=为数组 for(byte b:buf){ System.out.print(b&15);//打印每个节的低四位 System.out.println(b>>>4);//打印每个节的高四位 }
㈧ 在java中操作 byte数组
没有现成的 一般都是我们自己写工具类 可以给你占几个常用的方法:
public static int splitToArray(String[] strCompName, int count, int len, int amount, int repariFeeIndex, String strPrefix) throws Exception {
String [] strCompNameTemp ;
if(strCompName[count].length() > len) {
strCompNameTemp = splitToArray(strCompName, count, len, strPrefix);
for(int compIndex=0; compIndex<strCompNameTemp.length; compIndex++) {
if((repariFeeIndex + compIndex)>amount) {
break;
}
if(compIndex != 0) {
count++;
}
strCompName[count] = strCompNameTemp[compIndex];
}
} else if(count != 0){
strCompName[count] = strPrefix + strCompName[count];
}
return ++count;
}
㈨ java中byte是什么类型
java中byte是字节型。
java byte作为最小的数字来处理的,因此它的值域被定义为-128~127,byte的用作计数的时间远少于用表达基本内存单元的时间。
比如从stream里读入一个双字节字符,我们先收到2个byte。为了把byte转换成适当的形式,需要对byte值做一些比较,比如判断字符集要比较其是否在某个编码范围内。
(9)javabyte操作扩展阅读:
Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般程序员很少使用的。
例如,Java不支持go to语句,代之以提供break和continue语句以及异常处理。Java还剔除了C++的操作符过载(overload)和多继承特征,并且不使用主文件,免去了预处理程序。
㈩ java中为什么要用ByteBuffer代替byte操作字节数据
Java堆里的:HeapByteBuffer - 由byte[]存储实际数据
Java堆外的(native memory里的):DirectByteBuffer - 由 malloc() / mmap() 等申请出来的空间存储实际数据
所以如果针对byte[]来编程,就只能操作Java堆内的数据;而如果针对ByteBuffer接口来编程,就自然地可以操作Java堆内与堆外的数据,而不必关心具体底下的数据存哪里。