a.c:

 /*************************************************************************
* File: a.c
* Brief:
* Author:
* Mail:
* Created Time: Mon Dec 29 09:28:35 2014
************************************************************************/ #include<stdio.h> int clz(unsigned int a)
{
return __builtin_clz(a);
} int main()
{
unsigned int a=;
a=;
printf("0x%x ret=%d\n", a, clz(a)); a=;
printf("0x%x ret=%d\n", a, clz(a)); a=;
printf("0x%x ret=%d\n", a, clz(a)); a=;
printf("0x%x ret=%d\n", a, clz(a)); a=;
printf("0x%x ret=%d\n", a, clz(a)); a=;
printf("0x%x ret=%d\n", a, clz(a));; a=0x0FFFFFFF;
printf("0x%x ret=%d\n", a, clz(a)); a=0x1FFFFFFF;
printf("0x%x ret=%d\n", a, clz(a)); a=0x2FFFFFFF;
printf("0x%x ret=%d\n", a, clz(a)); a=0x4FFFFFFF;
printf("0x%x ret=%d\n", a, clz(a)); a=0x8FFFFFFF;
printf("0x%x ret=%d\n", a, clz(a)); a=0xFFFFFFFF;
printf("0x%x ret=%d\n", a, clz(a)); return ;
}

测试结果如下:

注意,a=0的时候,__builtin_cl返回的值和a=1的情况一样,都是是31位。

好奇怪,查到gcc官网上说(https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html):

— Built-in Function: int __builtin_clz (unsigned int x)
Returns the number of leading -bits in x, starting at the most significant bit position. If x is , the result is undefined.

也就是说,a=0的情况并没有规定在处理逻辑里面的。

下面我实现一个vc版本的:

int builtin_clz(unsigned int type)
{
int num = ;
type |=; //防止type为0时,出现无限循环infinite loop,type为0时的计算结果为31。
while(!(type & 0x80000000)) //检测最高位是不是1。
{
num +=;
type <<= ;
}
return num;
}

完。

理解__builtin_clz特性的更多相关文章

  1. 深入理解Ember-Data特性(上)

    写在前面 最近比较忙,换了新工作还要学习很多全新的技术栈,并给自己找了很多借口来不去坚持写博客.常常具有讽刺意味的是,更多剩下的时间并没有利用而更多的是白白浪费,也许这就是青春吧,挥霍吧,这不是我想要 ...

  2. 【转】CSS深入理解流体特性和BFC特性下多栏自适应布局

    这篇文章发布于 2015年02月12日,星期四,23:36,归类于 css相关. 阅读 30873 次, 今日 63 次 by zhangxinxu from http://www.zhangxinx ...

  3. CSS深入理解流体特性和BFC特性下多栏自适应布局

    一.块状元素的流体特性与自适应布局 块状元素像放在容器中的水流一样,内容区域会随着margin, padding, border的出现自动填满剩余空间,这就是块状元素的流体特性. 来一个小实验: di ...

  4. 深入理解Ember-Data特性(下)

    写在前面 最近比较忙,换了新工作还要学习很多全新的技术栈,并给自己找了很多借口来不去坚持写博客.常常具有讽刺意味的是,更多剩下的时间并没有利用而更多的是白白浪费,也许这就是青春吧,挥霍吧,这不是我想要 ...

  5. 理解Production- Ready特性

    1.外部配置(externalized configuration) 1).基于环境变量的配置 2).基于YAML的配置 3).默认配置值 2.健康检查(health checks) 1).它是否有一 ...

  6. C#基础系列——Attribute特性使用

    前言:上篇 C#基础系列——反射笔记 总结了下反射得基础用法,这章我们来看看C#的另一个基础技术——特性. 1.什么是特性:就博主的理解,特性就是在类的类名称.属性.方法等上面加一个标记,使这些类.属 ...

  7. C#回顾 –6.特性

    1.特性是什么?  Attribute 用来对类.属性.方法等标注额外的信息,贴一个标签(附着物)  通俗:给 类 或 类成员 贴一个标签,就像航空部为你的行李贴一个标签一样  个人理解,特性就是修饰 ...

  8. 【Todo】【转载】深入理解Java内存模型

    提纲挈领地说一下Java内存模型: 什么是Java内存模型 Java内存模型定义了一种多线程访问Java内存的规范.Java内存模型要完整讲不是这里几句话能说清楚的,我简单总结一下Java内存模型的几 ...

  9. 从实用主义深入理解c++虚函数

    记得几个月前看过C++虚函数的问题,当时其实就看懂了,最近笔试中遇到了虚函数竟然不太确定,所以还是理解的不深刻,所以想通过这篇文章来巩固下. 装逼一刻: 最近,本人思想发生了巨大的转变,在大学的时候由 ...

随机推荐

  1. bzoj4397【Usaco2015 Dec】Breed Counting

    4397: [Usaco2015 dec]Breed Counting Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 29  Solved: 25 ...

  2. ytu2572——猜灯谜

    题目描写叙述 A 村的元宵节灯会上有一迷题: 请猜谜 * 请猜谜 = 请边赏灯边猜 小明想,一定是每一个汉字代表一个数字,不同的汉字代表不同的数字. 请你帮小明把全部的可能的数都找出来吧. 输入 没有 ...

  3. Codeforces Round #277 (Div. 2) B.OR in Matrix 模拟

    B. OR in Matrix   Let's define logical OR as an operation on two logical values (i. e. values that b ...

  4. SecureCRT——设置打印中文字符

    1. 设置方法 使用SecureCRT打印由STM32发送的中文字符提示信息,显示乱码.在网上找了一些链接,再加上自己摸索,终于出了能够让SecureCRT打印中文的方法. 设置以下几个地方即可. 1 ...

  5. 初识Java,Java语言概述

    Java语言是SUN(斯坦福大学网络公司)公司1995年推出的一门高级编程语言,由此James Gosling被公认为Java语言之父.Java语言起初运用在小型的家用电子产品上,后来随着互联网的发展 ...

  6. 线性预测与Levinson-Durbin算法实现

    在学习信号处理的时候,线性预测是一个比较难理解的知识点,为了加快很多朋友的理解,这里给出Levinson-Durbin算法的线性预测实现和一个测试Demo,Demo中很明确的把输入信号.预测信号.预测 ...

  7. python 8:list.sort(reverse=false)、sorted(list, reverse=false)(对列表进行不可恢复排序;对列表进行可恢复排序)

    bicycles = ['trek', 'cannondale', 'redline', 'specialized'] print(bicycles) print(sorted(bicycles)) ...

  8. POJ 3253 STL优先队列

    题目大意:FJ需要修补牧场的围栏,他需要 N 块长度为 Li 的木头(N planks of woods).开始时,FJ只有一块无限长的木板,因此他需要把无限长的木板锯成 N 块长度 为 Li 的木板 ...

  9. Java中Ajaxa中文乱码问题

    客户端: url='test/queryList?itemName='+itemName; //如果只转一次url=encodeURI(toUrl);   到后台时:乱码    servlet里dec ...

  10. centos开机运行级别更改

    1.使用命令切换运行级别/目标 # systemctl isolate multi-user.target //切换到运行级别3,该命令对下次启动无影响,等价于telinit 3 # systemct ...