RISC-V的确是个好东西,可是,免费的东西往往需要付出代价才能得到了,最近遇到了一个算法中的问题,追了好久,最终追到了这个库函数中,没想到,这个库函数居然还隐藏着一些猫腻。值得记下来啊。

首先上一个在X86平台下的例子:

   1 #include <stdio.h>

 /* Position of the most significant bit of x */
#define gap8_fl1(x) (31 - __builtin_clz((x))) static int array[32];
int main()
{
int test = 0xFFFFF00; while(test > 0)
{
test = test>>1;
printf("test:%x gap8:%d \n",test,gap8_fl1(test));
} return 0;
}
~

  这个是编译器的库函数,表示要获取你输入参数的位数。

测试结果:

test:7ffff80 gap8:26
test:3ffffc0 gap8:25
test:1ffffe0 gap8:24
test:fffff0 gap8:23
test:7ffff8 gap8:22
test:3ffffc gap8:21
test:1ffffe gap8:20
test:fffff gap8:19
test:7ffff gap8:18
test:3ffff gap8:17
test:1ffff gap8:16
test:ffff gap8:15
test:7fff gap8:14
test:3fff gap8:13
test:1fff gap8:12
test:fff gap8:11
test:7ff gap8:10
test:3ff gap8:9
test:1ff gap8:8
test:ff gap8:7
test:7f gap8:6
test:3f gap8:5
test:1f gap8:4
test:f gap8:3
test:7 gap8:2
test:3 gap8:1
test:1 gap8:0
test:0 gap8:0

  让我们再看一下在RISC-V平台下的打印:

test:7ffff80 gap8:26
test:3ffffc0 gap8:25
test:1ffffe0 gap8:24
test:fffff0 gap8:23
test:7ffff8 gap8:22
test:3ffffc gap8:21
test:1ffffe gap8:20
test:fffff gap8:19
test:7ffff gap8:18
test:3ffff gap8:17
test:1ffff gap8:16
test:ffff gap8:15
test:7fff gap8:14
test:3fff gap8:13
test:1fff gap8:12
test:fff gap8:11
test:7ff gap8:10
test:3ff gap8:9
test:1ff gap8:8
test:ff gap8:7
test:7f gap8:6
test:3f gap8:5
test:1f gap8:4
test:f gap8:3
test:7 gap8:2
test:3 gap8:1
test:1 gap8:0
test:0 gap8:32

  这里就有一个差别,就是当x等于0的时候,__builtin_clz((x)的值在risc-v中居然是-1,这个坑真是的不小啊。算是学习了。

最新文章

  1. Java中使用IO流实现大文件的分裂与合并
  2. Jquery实现花瓣随机飘落(收藏自慕课网)
  3. Java多线程理解
  4. 如何用参数化SQL语句污染你的计划缓存
  5. lighttpd fastcgi的搭建
  6. java大数处理
  7. PHP初入,div知识点整理(特效&amp;字体等元素的使用整理)
  8. 《通过C#学Proto.Actor模型》之Behaviors
  9. vue+cordova插件使用,bluetoothSerial.connect()连接失败
  10. java之搭建webservice服务端
  11. java 子类父类相互转换
  12. JS中点击事件冒泡阻止
  13. R语言绘制带errorbar 的柱状图
  14. result源码
  15. 让WIN7桌面显示IE图标
  16. 将hive的hql执行结果保存到变量中
  17. python signal
  18. XSS与CSRF两种跨站攻击总结
  19. React 同构思想
  20. Ubuntu设置中文-以及-安装拼音输入法

热门文章

  1. 生产与学术之Pytorch模型导出为安卓Apk尝试记录
  2. JS require and import
  3. Linux 安装源码软件
  4. Android学习(四)
  5. springCloud笔记
  6. IntelliJ隐藏特定后缀文件
  7. Java 初学UDP传输
  8. CRT-常用命令
  9. Vue的双向数据绑定
  10. 常用API String