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. C# 操作 INI 自己工作笔记(对文本框的操作)

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  2. vs code golang代码自动补全

    “go.useCodeSnippetsOnFunctionSuggest”: true 文件-->首选项--->设置--->用户设置 添加下行:然后就可以自动补全了,包括() “go ...

  3. Human Gene Functions(dp)

    http://poj.org/problem?id=1080 #include <stdio.h> #include <stdlib.h> #include <strin ...

  4. html5 历史管理

    1.onhashchange:改变hash值来进行历史管理. <!DOCTYPE html> <html> <head> <meta charset=&quo ...

  5. MySQL学习笔记之内连接

    不多说,直接上干货!  MySQL的内连接 #内连接,两个表按照条件匹配 select class1.stuid,class1.stuname,class1.sex,course from class ...

  6. hbase无法启动,The node /hbase is not in ZooKeeper

    问题详细描述如下: 2016-12-09 15:10:39,160 ERROR [org.apache.hadoop.hbase.client.ConnectionManager$HConnectio ...

  7. RabbitMQ 官方NET教程(一)【介绍】

    本教程假定RabbitMQ已在标准端口(5672)上的localhost上安装并运行.如果使用不同的主机,端口或凭据,连接设置将需要调整. RabbitMQ是一个消息代理:它接受并转发消息. 您可以将 ...

  8. 《CSS Mastery》读书笔记(2)

    第二章  目标的样式   要用CSS样式化一个HTML元素,必须要定位一个元素, CSS的选择器就是这样的手段. 这章中,你要学到的 • Common selectors 普通选择器 • Advanc ...

  9. java Queue中 remove/poll, add/offer, element/peek区别

    offer,add区别: 一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝. 这时新的 offer 方法就可以起作用了.它不是对调用 add() 方法抛出一个 unche ...

  10. 使用CMD建立指定格式的文件

    一.建立空文件的几种方法1.cd.>a.txtcd.表示改变当前目录为当前目录,即等于没改变:而且此命令不会有输出.>表示把命令输出写入到文件.后面跟着a.txt,就表示写入到a.txt. ...