[原创] 删繁就简--1 bit的查找,看了白版主的0bit查找的感想
来源:互联网 发布:破壁机骗局知乎 编辑:程序博客网 时间:2024/05/22 04:49
tqOS中使用了OsMapTable任务优先级映射表来查找最高有效位。这在8*8任务的系统中是可行的,需要的查找表有256个元素。但是如果进一步提升系统的最大可支持的任务数量,比如16*16最大支持256个任务的话,就需要查找表中有2^16=65535个元素,每个元素2个字节,也就是一共128KB......不可思议,所以如果扩展最大任务数量至16*16甚至是32*32,用查找表就不合适了。可以使用循环判断最高有效位的方法,但是毕竟循环的时间复杂度不稳地,所以有了下面的基于二分查找法的最高有效位查找算法,这是我在EEWORLD里面发的一个帖子,保存下来,以后如果要修改tqOS可能会用上,也有可能在其他场合用上。程序也能修改为最高有效bit0位的查找。原理相似。
帖子链接:删繁就简--1 bit的查找,看了白版主的0bit查找的感想
http://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=501032&fromuid=711975
(出处: 电子工程世界-论坛)
#include "stdio.h"int bit1search(unsigned int data){int pos = 0;if((data | 0x0000ffff) != 0x0000ffff){data >>= 16;pos += 16;}if((data | 0x000000ff) != 0x000000ff){data >>= 8;pos += 8;}if((data | 0x0000000f) != 0x0000000f){data >>= 4;pos += 4;}if((data | 0x00000003) != 0x00000003){data >>= 2;pos += 2;}if((data | 0x00000001) != 0x00000001){data >>= 1;pos += 1;}return pos;}int bit1search_for(unsigned int data){int pos = 0,i;for(i=0;i<32;i++){if(data & (1 << i))pos = i;}return pos;}void main(){printf("%d %d\r\n",bit1search(0x00000008),bit1search_for(0x00000008));printf("%d %d\r\n",bit1search(0x86716545),bit1search_for(0x86716545));printf("%d %d\r\n",bit1search(0x69874861),bit1search_for(0x69874861));printf("%d %d\r\n",bit1search(0xe987d986),bit1search_for(0xe987d986));printf("%d %d\r\n",bit1search(0x04898646),bit1search_for(0x04898646));printf("%d %d\r\n",bit1search(0x14584646),bit1search_for(0x14584646));printf("%d %d\r\n",bit1search(0x35168468),bit1search_for(0x35168468));printf("%d %d\r\n",bit1search(0x81763422),bit1search_for(0x81763422));int i,a,b;for(i=0;i<0xFFFFFFFF;i++){a = bit1search(i);b = bit1search_for(i);if(a != b)printf("error%d\r\n",i);}}
1 0
- [原创] 删繁就简--1 bit的查找,看了白版主的0bit查找的感想
- 64-bit CPU的朋友来看看
- 数bit 1的个数
- 统计bit 1的个数
- 将HBITMAP转换成BMP位图文件的各个部分,可以在1BIT,4BIT,8BIT,16BIT,24BIT,32BIT之间转换
- 范围查找 和最近的一些感想
- 32bit和64bit的区别
- 昨晚看了点书上的查找和排序算法
- 看了两天的spring的感想
- bit操作的问题
- mysql的bit类型
- 看了两位博主之后的感想
- 看了简书的感想
- GeoIP<libGeoIP.so.1()(64bit)>以及gperftools<libprofiler.so.0()(64bit)>库的安装
- [原创]看GONZO《最终兵器彼女》的感想
- 看了"录取通知"后的感想!!1
- 使用FPGA的1 bit DAC
- C语言bit位(:1)的使用
- 各种工具类
- android EventBus 3.0 官方的混淆配置
- CTL控制文件的小感悟
- Tomcat-JavaWeb
- thinkPHP中{$Think }用法
- [原创] 删繁就简--1 bit的查找,看了白版主的0bit查找的感想
- PCI配置空间简介
- 服务启动问题总结
- 第九章
- C语言,用EGE图形库实现推箱子小游戏
- 下划线字符转换为驼峰式字符
- 先锋机器人激光建图配置方法(一)
- ubuntu完美搭建git服务器 客户端
- 文章标题