Java中字节和Int的左移位
我是Java新手。所以,我想了解它背后的工作原理Java中字节和Int的左移位,java,Java,我是Java新手。所以,我想了解它背后的工作原理 int one_int=1; 字节1=1; 一个两个移位操作产生相同的二进制值10000002。区别在于该值的最高有效位的解释 有符号整数的最高有效位确定该数字是正(零)还是负(一) int是32位类型,因此其最高有效位为零,因此10000002被解释为正128位 “byte”是8位类型,因此其最高有效位为1,因此10000002被解释为负-128 在java中 整数由32位组成 字节由8位组成 将字节向左移动7次时: 00000001->
int one_int=1;
字节1=1;
一个两个移位操作产生相同的二进制值10000002。区别在于该值的最高有效位的解释
有符号整数的最高有效位确定该数字是正(零)还是负(一)
int
是32位类型,因此其最高有效位为零,因此10000002被解释为正128位
- “byte”是8位类型,因此其最高有效位为1,因此10000002被解释为负-128
在java中
- 整数由32位组成
- 字节由8位组成
将字节向左移动7次时:
00000001->10000000
将int向左移动7次时:
00000000000000000000000000000000000001->00000000000000000000000000000000000010000000
因为它们都用于表示有符号和无符号数字,所以我们使用该操作
这意味着第一位(MSB)表示数字的符号(0表示+,1表示-)。字节的第一位是符号位。所以,1000 0000=>-128,但整数的第8位只是整数的一部分。比如,0000 0000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000。因此,整数符号位与字节的符号位不同,从右看@vatsalmevada的可能重复项我认为这不是一个好的重复项,因为它没有专门处理符号位。
(byte)128==-128
谢谢@dasblinkenlight@VishalSharma不客气。如果这回答了你的问题,请考虑通过点击旁边的复选标记来接受其中一个答案。
int one_int = 1;
byte one = 1;
one <<= 7;
one_int <<= 7;
System.out.println(one_int); //Output is 128
System.out.println(one); //Output is -128