【问题标题】:using biginteger for java program regarding virtual addresses使用关于虚拟地址的java程序的biginteger
【发布时间】:2015-08-20 16:26:47
【问题描述】:

也许由于我对 biginteger 的使用有限,我误解了,但我有一个程序需要用户输入页面大小和虚拟地址并计算偏移量和虚拟页面。我可以毫无问题地进行计算,但是在比较输入的迭代器时,虚拟地址(4294967295)的必要值超出了范围。我试图将这个数字声明为一个大整数,但相同的运算符似乎不起作用。我是否必须忘记零,只是想办法说输入小于或等于这个数字?代码如下:

public class VAddress {

public static void main(String args[]){

    BigInteger max = new BigInteger("4294967295"); 

    Scanner PAGEinput = new Scanner(System.in);
    Scanner ADDinput = new Scanner(System.in);

      System.out.println("Please Enter the system page size (between 512 and 16384):");
    int page = PAGEinput.nextInt();

    System.out.println("Please Enter the Virtual Address: ");
    int address = ADDinput.nextInt();

    if(page >= 512 && page <= 16384){
        if( address >= 0 && address <= max){

        }
       }



     }

 }

【问题讨论】:

  • 你考虑过long的用法吗?

标签: java virtual biginteger


【解决方案1】:
BigInteger address = new BigInteger(address);
if(page >= 512 && page <= 16384){
    if(address.compareTo(new BigInteger("0"))>=0 && address.compareTo(max)<=0){

    }
}

【讨论】:

  • 虽然很多人会指出,长原始类型可以保存该值,您可以直接使用它。
  • 完美,我只是想确保我没有使用太多不必要的语法。谢谢大家!
  • compareTo(new BigInteger("0")) 等价于signum()
【解决方案2】:

您还需要将整数 address 转换为 BigInteger 以便您可以将其与最大值进行比较,请参阅 this question

【讨论】:

  • 所以类似这样: System.out.println("请输入虚拟地址:"); BigInteger 地址 = ADDinput.nextBigInteger();
  • 是的。如果您走这条路线,请不要忘记将 0 也转换为大整数
猜你喜欢
  • 1970-01-01
  • 2020-11-28
  • 2016-01-27
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
  • 2011-08-20
  • 2011-01-11
  • 2018-07-09
相关资源
最近更新 更多