numberOfLeadingZeros的使用说明

  Java 中Integer是int的派生类型,内置了一些常用的对int类型数据的处理方法
下面对其简单的分析。

 1, String toBinaryString(int i) 给定一个int类型数据,返回这个数据的二进制字符串。
  示例:
  

Java代码 

 

  1. int x=1;  
  2. int y=2;  
  3. int z=3;  
  4. System.out.println(x+"的二进制表示为:"+Integer.toBinaryString(x));  
  5. System.out.println(y+"的二进制表示为:"+Integer.toBinaryString(y));  
  6. System.out.println(z+"的二进制表示为:"+Integer.toBinaryString(z));  

   运行结果为:

Java代码 

 

  1. 1的二进制表示为:1  
  2. 2的二进制表示为:10  
  3. 3的二进制表示为:11  

 

2,int bitCount(int i) 给定一个int类型数据,返回这个数据的二进制串中“1”的总数量。

 

 示例:

Java代码 

 

  1. int x=1;  
  2. int y=2;  
  3. int z=3;  
  4.       
  5. System.out.println(x+"的二进制表示为:"+Integer.toBinaryString(x)+" bitCount方法返回值为:"+Integer.bitCount(x));  
  6. System.out.println(y+"的二进制表示为:"+Integer.toBinaryString(y)+" bitCount方法返回值为:"+Integer.bitCount(y));  
  7. System.out.println(z+"的二进制表示为:"+Integer.toBinaryString(z)+" bitCount方法返回值为:"+Integer.bitCount(z));  
  8.           

 运行结果为:

Java代码 

 

  1. 1的二进制表示为:1 bitCount方法返回值为:1  
  2. 2的二进制表示为:10 bitCount方法返回值为:1  
  3. 3的二进制表示为:11 bitCount方法返回值为:2  

 

   3,int numberOfLeadingZeros(int i) 给定一个int类型数据,返回这个数据的二进制串中从最左边算起连续的“0”的总数量。因为int类型的数据长度为32所以高位不足的地方会以“0”填充。

 

示例:

Java代码 

 

  1. int x=1;  
  2. int y=2;  
  3. int z=5;  
  4.       
  5. System.out.println(x+"的二进制表示为:"+Integer.toBinaryString(x)+"最左边开始数起连续的0的个数为:"+Integer.numberOfLeadingZeros(x));  
  6. System.out.println(y+"的二进制表示为:"+Integer.toBinaryString(y)+"最左边开始数起连续的0的个数为:"+Integer.numberOfLeadingZeros(y));  
  7. System.out.println(z+"的二进制表示为:"+Integer.toBinaryString(z)+"最左边开始数起连续的0的个数为:"+Integer.numberOfLeadingZeros(z));  
  8.           

 运行结果为:

Java代码 

 

  1. 1的二进制表示为:1最左边开始数起连续的0的个数为:31  
  2. 2的二进制表示为:10最左边开始数起连续的0的个数为:30  
  3. 5的二进制表示为:101最左边开始数起连续的0的个数为:29  

4,int numberOfTrailingZeros(int i) 给定一个int类型数据,返回这个数据的二进制串中从最右边算起连续的“0”的总数量。因为int类型的数据长度为32所以高位不足的地方会以“0”填充。

Java代码 

  1. int x=1;  
  2. int y=2;  
  3. int z=5;  
  4.       
  5. System.out.println(x+"的二进制表示为:"+Integer.toBinaryString(x)+"最右边开始数起连续的0的个数为:"+Integer.numberOfTrailingZeros(x));  
  6. System.out.println(y+"的二进制表示为:"+Integer.toBinaryString(y)+"最右边开始数起连续的0的个数为:"+Integer.numberOfTrailingZeros(y));  
  7. System.out.println(z+"的二进制表示为:"+Integer.toBinaryString(z)+"最右边开始数起连续的0的个数为:"+Integer.numberOfTrailingZeros(z));  

运行结果为:

Java代码  

  1. 1的二进制表示为:1最右边开始数起连续的0的个数为:0  
  2. 2的二进制表示为:10最右边开始数起连续的0的个数为:1  
  3. 5的二进制表示为:101最右边开始数起连续的0的个数为:0 

 

 5,Integer decode(String nm) 给定一个10进制,8进制,16进制中任何一种进制的字符串,该方法可以将传入的字符串转化为10进制数字的Integer类型并返回。

 

示例:

Java代码 

  1. String a="010";//八进制  
  2. String b="10";//十进制  
  3. String c="0X10";//十六进制  
  4. System.out.println("8进制数据"+a+"  解析结果为:"+Integer.decode(a));  
  5. System.out.println("10进制数据"+b+" 解析结果为:"+Integer.decode(b));  
  6. System.out.println("16进制数据"+c+" 解析结果为:"+Integer.decode(c));  

 运行结果为:

Java代码 

  1. 8进制数据010  解析结果为:8  
  2. 10进制数据10 解析结果为:10  
  3. 16进制数据0X10 解析结果为:16  
  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现分页式存储管理的基本思路是将物理内存划分为固定大小的页框,每个进程拥有一定数量的页面,每个页面存放进程中的一段程序或数据。当进程需要访问某个页面时,操作系统会将该页面所在的页框调入物理内存中,并将原先的页面调出到磁盘中,以实现内存空间的管理。 为了管理内存中的页框,通常使用位示图来表示每个页框的使用情况。位示图是一个二进制数组,每个元素表示一个页框是否被使用,为1表示已经被使用,为0表示空闲。 FIFO算法的思想是按照页面进入内存的先后顺序进行置换。当内存中的页面已满时,选择最早进入内存的页面进行置换。为了实现FIFO算法,可以使用一个队列来记录页面进入内存的顺序。每次页面被访问时,将其加入队列尾部,当内存已满时,选择队列头部的页面进行置换。 LRU算法的思想是选择最近最少使用的页面进行置换。为了实现LRU算法,可以使用一个链表来记录页面的使用情况。每次页面被访问时,将其从链表中删除并插入到链表尾部。当内存已满时,选择链表头部的页面进行置换。 下面是一个java程序示例,实现了分页式存储管理,并体现了FIFO和LRU算法的思想: ```java public class PageReplacement { private int[] memory; // 物理内存 private int[] pageTable; // 页面表 private byte[] bitMap; // 位示图 private Queue<Integer> fifoQueue; // FIFO队列 private LinkedList<Integer> lruList; // LRU链表 private int pageSize; // 页面大小 private int pageFrameNum; // 页面帧数 private int pageTableSize; // 页面表大小 private int missCount; // 缺页次数 public PageReplacement(int pageSize, int pageFrameNum) { this.pageSize = pageSize; this.pageFrameNum = pageFrameNum; this.pageTableSize = 1 << (32 - Integer.numberOfLeadingZeros(pageSize * pageFrameNum - 1)); this.memory = new int[pageSize * pageFrameNum]; this.pageTable = new int[pageTableSize]; this.bitMap = new byte[pageFrameNum / 8]; this.fifoQueue = new LinkedList<>(); this.lruList = new LinkedList<>(); this.missCount = 0; } public void accessPage(int pageNum) { int pageFrame = pageTable[pageNum]; if (pageFrame == 0) { // 页面不在内存中 missCount++; pageFrame = findFreePageFrame(); if (pageFrame == -1) { // 内存已满,需要进行页面置换 pageFrame = replacePageFrame(); } loadPage(pageNum, pageFrame); } updatePageTable(pageNum, pageFrame); } private int findFreePageFrame() { for (int i = 0; i < pageFrameNum; i++) { if ((bitMap[i / 8] & (1 << (i % 8))) == 0) { return i; } } return -1; } private int replacePageFrame() { int pageFrame; if (!fifoQueue.isEmpty()) { // 使用FIFO算法进行页面置换 pageFrame = fifoQueue.remove(); } else { // 使用LRU算法进行页面置换 pageFrame = lruList.removeFirst(); } unloadPage(pageFrame); return pageFrame; } private void loadPage(int pageNum, int pageFrame) { pageTable[pageNum] = pageFrame; bitMap[pageFrame / 8] |= (1 << (pageFrame % 8)); fifoQueue.add(pageFrame); lruList.add(pageFrame); System.arraycopy(/* 从磁盘中读取页面内容 */); } private void unloadPage(int pageFrame) { int pageNum = findPageNum(pageFrame); pageTable[pageNum] = 0; bitMap[pageFrame / 8] &= ~(1 << (pageFrame % 8)); fifoQueue.remove(pageFrame); lruList.remove(pageFrame); System.arraycopy(/* 将页面内容写回磁盘 */); } private void updatePageTable(int pageNum, int pageFrame) { pageTable[pageNum] = pageFrame; lruList.remove(pageFrame); lruList.add(pageFrame); } private int findPageNum(int pageFrame) { for (int i = 0; i < pageTableSize; i++) { if (pageTable[i] == pageFrame) { return i; } } return -1; } public int getMissCount() { return missCount; } } ``` 在上述程序中,accessPage方法用于访问某个页面,如果该页面不在内存中,则进行缺页处理。findFreePageFrame方法用于查找空闲的页面帧,replacePageFrame方法用于选择页面进行置换,loadPage方法用于将某个页面调入内存,unloadPage方法用于将某个页面调出内存,updatePageTable方法用于更新页面表和LRU链表,findPageNum方法用于查找某个页面所在的页面表项。程序中实现了FIFO和LRU算法的思想,当内存已满时,使用FIFO队列或LRU链表选择页面进行置换。程序中的具体实现可能需要根据具体情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值