导航:首页 > 编程语言 > java与运算byte

java与运算byte

发布时间:2022-06-25 15:55:31

java中byte类型的介绍。 谢谢

1、在Java中,byte类型的数据是8位带符号的二进制数。最高位表示正负,0为正,1为负。

2、java byte是做为最小的数字来处理的,因此它的值域被定义为-128~127,也就是signed byte。

3、正数的最高位都是 0 ,正数的值就是二进制表示的值。

4、负数的最高位都是 1 ,负数的值是 取反后加一 然后加个负号得到的值。

(1)java与运算byte扩展阅读

1、java基本数据类型

JAVA中一共有八种基本数据类型,分别是byte、short、int、long、float、double、char、boolean。

2、java各数据类型取值范围

byte,整型,1个字节,范围:-2的7次方 ~ 2的7次方-1;

short,整型,2个字节,范围:-2的15次方 ~ 2的15次方-1;

int,整型,4个字节,范围:-2的31次方 ~ 2的31次方-1;

long,整型,8个字节,范围:-2的63次方 ~ 2的63次方-1;

float,浮点型,4个字节,范围:3.402823e+38 ~ 1.401298e-45;

double,浮点型,8个字节,范围:1.797693e+308~ 4.9000000e-324;

char,文本型,2个字节,范围:0~2的16次方-1;

boolean,布尔型,1个字节,范围:true/false;

参考资料

网络-java字符型

⑵ java中如何计算一个字符串的byte长度(一个汉字多少字符)

中文并不一定是占两个字节的,具体占多少字节是跟具体的编码方式相关的。 比如说:GB2312、GBK、GB18030 编码是占用两个字节的,但是 UTF-8 编码的话至少需要占用三个字节。 有一个简单方法,就是把大于 0xff 的字符都作为两个字符(当然是在 GBK 环境下) Java code publicstaticint count(String str) { if(str ==null|| str.length ==0) { return0; } int count =0; char[] chs = str.toCharArray(); for(int i =0; i < chs.length; i++) { count += (chs[i] >0xff) ?2 : 1; } return count; } 或者你直接使用 int len = str.getBytes("gbk");上面代码假设你的数据库编码格式是 GBK 的,而不是 UTF-8 的,如果是 UTF-8 的话,上面的代码无效!1字节等于8比特,一个字母是1字节,而一个汉字要用2个字节。一个汉字=2个字符

⑶ java中byte的问题

0xFF == 二进制的:1111 1111
& 是按位与运算,任何一个byte & 0xFF都得原有的数,它主要应用于int等,可以参照这个:http://..com/question/2055765535243071187
所以你上面的例子中的两个&0xFF是废代码

第一个函数原本的意思应该为了截取最后一个字节。但是因为传递的不是int而是byte导致变得是byte强制类型转换为int,是个失败的设计,因为只要强制转换为byte就能达到相同效果了。多此一举

第二个函数是为了取得一个数对应的十六进制字符串,不过也跟上面的一样,因为传递的是byte,导致整个设计也是失败的。

⑷ 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长度(一个汉字多少字符)

中文并不一定是占两个字节的,具体占多少字节是跟具体的编码方式相关的。
比如说:GB2312、GBK、GB18030
编码是占用两个字节的,但是
UTF-8
编码的话至少需要占用三个字节。
有一个简单方法,就是把大于
0xff
的字符都作为两个字符(当然是在
GBK
环境下)
Java
code
publicstaticint
count(String
str)
{
if(str
==null||
str.length
==0)
{
return0;
}
int
count
=0;
char[]
chs
=
str.toCharArray();
for(int
i
=0;
i
<
chs.length;
i++)
{
count
+=
(chs[i]
>0xff)
?2
:
1;
}
return
count;
}
或者你直接使用
int
len
=
str.getBytes("gbk");上面代码假设你的数据库编码格式是
GBK
的,而不是
UTF-8
的,如果是
UTF-8
的话,上面的代码无效!1字节等于8比特,一个字母是1字节,而一个汉字要用2个字节。一个汉字=2个字符

⑹ java中的byte有什么作用

在今天,byte字节就是一个八位元组,使用其它位数的机器都进了博物馆。 java也提供了一个byte数据类型,并且是基本类型。java byte是做为最小的数字来处理的,因此它的值域被定义为-128~127,也就是signed byte。不幸的是,byte的用作计数的时间远少于用表达基本内存单元的时间。比如从stream里读入一个双字节字符,我们先收到2个byte。为了把byte转换成适当的形式,需要对byte值做一些比较,比如判断字符集要比较其是否在某个编码范围内,比如GBK 0x8140~0xFEFE,然后new适当的string。 signed byte 把 0x00 ~ 0xff 映射成 0~127 -128~-1 两段,注意当与literal比较时,java自动将literal识别成int 可以用 下面的小程序来验证: 1 public class JavaByte 2 { 3 public static void main(String[] args) 4 { 5 byte b = 0; 6 for ( int i = 0; i <= 0xff; ++i ) 7 { 8 b = (byte)i; 9 System.out.print(" "+i+":"+b+", "); 10 } 11 } 12 } 当收到(0xC7B0)这个GBK字符时,要判断 0x81 <= 0xC7 <= 0xFE 是否成立,实际变成判断 -127 < -57 < -2,唔,万幸,可以直接比较 low < ch < high。如果要判断 0x00 <= 0xC7 <= 0x80 (ASC Char),这回麻烦了,变成判断 (0 <= -57 <= 127) || ( 0x57 == -128 )。比较简单的办法用 (b+256)%256的办法令其值回到0~255,或者用&0xff并赋给一个int。考虑到jvm里的byte其实也是32位的,所以在计划用byte的地方,直接用integer并不会有什么实际的损失,而 DataInputStream也提供了一个readUnsignedByte()方法返回的是int。所以真正的解决方案是忘掉byte,直接上 int。至于为什么java没有unsigned数据类型,照下面这个interview里Jams Golsing的意思,应该是java应该简单而unsigned算术过于复杂了会让大多数程序员产生误解误用:

⑺ java的byte和byte的区别

在java中有基本类型和复杂类型之分,
byte是基本类型,是编译器可以直接识别的,属于java语法方面的
而byte是一个java包中的一个类,编译器不认识byte
他看到的是一个用户自己定义的class;巧就巧在
java包中的byte类完成的功能类似与编译器提供的byte基本类型
关于byte的更过详情请查看java
api文档

⑻ java中位运算符,(byte) 0x80 的那个,为何答案是-32

0x80 表示 128,(0x 代表 16 进制,8 * 16¹ + 0 * 16º = 128),128 的二进制是 10000000,即 2 的 7 次方。
byte 共有 8 位,表示范围是 -128 ~ 127,二进制即 10000000 ~ 01111111,第一位为符号位,1 表示负数,0 表示整数,11111111 即表示 -127,10000000 比较特殊,表示 -128。所以,0x80 本来是整数的 128,二进制 (Java 中整数4个字节32位)。(byte)0x80,将其转换为 byte,即截取最后 8 位,即 10000000,就是 byte 中的 -128。
>> 表示右移操作,右移一位表示除以 2。(byte)0x80 >> 2,表示将(byte)0x80右移两位,那么就是 -128 ÷ 2 ÷ 2 = -32。

⑼ java(byte)>>>时怎么运算的

0xa2是142, 已经超过了 byte 的存储空间(-128~+127),会溢出,得到了一个未知的数.
>>>是无符号右移,对于正数相当于除以了4(2^2).

⑽ 在Java中,byte类型数据在运算之前要转换成int类型数据。

byte类型数据是不能直接相加的,相加会自动类型会转换int型,所以你再赋值给byte
型变量要强制类型转换成byte型如下:
c
=
(byte)(a+b);
注:自动类型转换:小类型转大类型

byte占一个字节,int占4个字节
强制类型转换:大类型转小类型

阅读全文

与java与运算byte相关的资料

热点内容
编译未检测到仿真器 浏览:807
压缩机每次启动12分钟就停 浏览:729
creo复制曲面命令 浏览:959
程序员恋上女硕士 浏览:669
ansys的get命令 浏览:987
国外dns苹果服务器地址 浏览:430
国家职业技术资格证书程序员 浏览:652
奇瑞租车app是什么 浏览:99
系统源码安装说明 浏览:420
命令行加壳 浏览:96
解压时显示防失效视频已加密 浏览:295
苹果短信加密发送 浏览:446
天翼私有云服务器租用 浏览:733
贵州云服务器属于哪个上市公司 浏览:58
编程联动教程 浏览:481
小天才app怎么升级v242 浏览:545
简单手工解压玩具制作大全 浏览:928
免费编程电子书 浏览:870
想玩游戏什么app最合适 浏览:560
安卓手机如何用airportspro 浏览:449