Java 爪哇左移&;右移

Java 爪哇左移&;右移,java,Java,这更像是一个澄清问题。假设我在int myvar中有一个值,其位表示为100000000000000000。现在这是java中int的实际大小的32位(如果这个假设不能成立,请纠正我) 现在的问题是myvar>1的值是多少?会是110000…00000吗 最后,我们如何确定占用变量的位数?我的意思是,Java中是否有sizeOf(int)函数,答案是32?谢谢您对位移位的理解是正确的。以下代码将确认这一点。 对于Java中的sizeOf函数,所有int都占用32位。时期至于更一般的函数大小,那么

这更像是一个澄清问题。假设我在int myvar中有一个值,其位表示为100000000000000000。现在这是java中int的实际大小的32位(如果这个假设不能成立,请纠正我)

现在的问题是myvar>1的值是多少?会是110000…00000吗


最后,我们如何确定占用变量的位数?我的意思是,Java中是否有sizeOf(int)函数,答案是32?谢谢

您对位移位的理解是正确的。以下代码将确认这一点。 对于Java中的sizeOf函数,所有int都占用32位。时期至于更一般的函数大小,那么这是一个更复杂的问题,其他SO问题都会回答。也就是说EHCache有一个相当不错的实现

intv1=1;
intv4=v1>>>1;
//-2147483648为100000000000000000,并设置了1位
System.out.println(v1+“是”+整数.toBinaryString(v1)+“并且具有”+整数.bitCount(v1)+“位集”);
//0是0,设置了0位
System.out.println(v2+“是”+Integer.toBinaryString(v2)+“并且具有”+Integer.bitCount(v2)+“位集”);
//-1073741824是11000000000000000000000000,设置了2位
System.out.println(v3+“是”+Integer.toBinaryString(v3)+“并且具有”+Integer.bitCount(v3)+“位集”);
//1073741824为10000000000000000000000000000,并设置了1位
System.out.println(v4+“是”+整数.toBinaryString(v4)+“并且具有”+整数.bitCount(v4)+“位集”);
假设我在int myvar中有一个值,其位表示为100000000000000000000000。。。。现在的问题是myvar>1的值是多少?会是110000…00000吗

让我们看看

int myvar = Integer.MIN_VALUE;
System.out.println(Integer.toBinaryString(myvar));
System.out.println(Integer.toBinaryString(myvar << 1));
System.out.println(Integer.toBinaryString(myvar >> 1));
Java中是否有sizeOf(int)函数,答案是32

不完全是。但是,包装类型中有大小字段

System.out.println("Integer: " + Integer.SIZE);
System.out.println("Double: " + Double.SIZE);
输出为

Integer: 32
Double: 64

int是32位有符号的,因此第一位用于符号+/- 所以实际上只有31位决定值。 请参考以下网址

还有URL


具有位移位工作代码-支持右/左位移位。您可以从问题或答案中选择任何一个程序,使用您想要转换的数字和您想要转换的程度运行它…您可以立即得到答案…

所有java原语都具有预先确定且不变的位大小。检查一下。例如,int始终是32位。对于您的问题“的值是多少…”,您只需运行一些代码即可查看。@Takendark当然可以,但我需要确定它的大小。我不明白您为什么需要这样做,因为它们总是相同的。如果你有一个int,它是32位,如果你有一个short,它是16位,依此类推。至于
的行为,为什么不试试呢?至于可变大小,Java中只有几个基本类型,每个包装器类都有一个
SIZE
常量,可以满足您的需求。如果你想得到巴洛克风格,你甚至可以把它们放在地图上,这样你就可以按类查找它们(例如,
int-bitSize=bitSizeMap.get(int.class);
),我不确定你为什么需要用编程的方式来做这件事(Java没有像C这样的宏,您可以有条件地在
.h
文件中将某些类型定义为
int
long
).如果你有一个通过反射得到的
,我不认为有一种方法可以得到大小,但是你可以像Ted的评论中那样使用地图,因为只有少数原语。尽管如此,我仍然想不出这样做的正当理由。
System.out.println("Integer: " + Integer.SIZE);
System.out.println("Double: " + Double.SIZE);
Integer: 32
Double: 64