理解__builtin_clz特性
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特性的更多相关文章
- 深入理解Ember-Data特性(上)
写在前面 最近比较忙,换了新工作还要学习很多全新的技术栈,并给自己找了很多借口来不去坚持写博客.常常具有讽刺意味的是,更多剩下的时间并没有利用而更多的是白白浪费,也许这就是青春吧,挥霍吧,这不是我想要 ...
- 【转】CSS深入理解流体特性和BFC特性下多栏自适应布局
这篇文章发布于 2015年02月12日,星期四,23:36,归类于 css相关. 阅读 30873 次, 今日 63 次 by zhangxinxu from http://www.zhangxinx ...
- CSS深入理解流体特性和BFC特性下多栏自适应布局
一.块状元素的流体特性与自适应布局 块状元素像放在容器中的水流一样,内容区域会随着margin, padding, border的出现自动填满剩余空间,这就是块状元素的流体特性. 来一个小实验: di ...
- 深入理解Ember-Data特性(下)
写在前面 最近比较忙,换了新工作还要学习很多全新的技术栈,并给自己找了很多借口来不去坚持写博客.常常具有讽刺意味的是,更多剩下的时间并没有利用而更多的是白白浪费,也许这就是青春吧,挥霍吧,这不是我想要 ...
- 理解Production- Ready特性
1.外部配置(externalized configuration) 1).基于环境变量的配置 2).基于YAML的配置 3).默认配置值 2.健康检查(health checks) 1).它是否有一 ...
- C#基础系列——Attribute特性使用
前言:上篇 C#基础系列——反射笔记 总结了下反射得基础用法,这章我们来看看C#的另一个基础技术——特性. 1.什么是特性:就博主的理解,特性就是在类的类名称.属性.方法等上面加一个标记,使这些类.属 ...
- C#回顾 –6.特性
1.特性是什么? Attribute 用来对类.属性.方法等标注额外的信息,贴一个标签(附着物) 通俗:给 类 或 类成员 贴一个标签,就像航空部为你的行李贴一个标签一样 个人理解,特性就是修饰 ...
- 【Todo】【转载】深入理解Java内存模型
提纲挈领地说一下Java内存模型: 什么是Java内存模型 Java内存模型定义了一种多线程访问Java内存的规范.Java内存模型要完整讲不是这里几句话能说清楚的,我简单总结一下Java内存模型的几 ...
- 从实用主义深入理解c++虚函数
记得几个月前看过C++虚函数的问题,当时其实就看懂了,最近笔试中遇到了虚函数竟然不太确定,所以还是理解的不深刻,所以想通过这篇文章来巩固下. 装逼一刻: 最近,本人思想发生了巨大的转变,在大学的时候由 ...
随机推荐
- CodeForces--626C--Block Towers (二分)
Block Towers Time Limit: 2000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submit ...
- 【BZOJ 1370】 团伙
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1370 [算法] 并查集 + 拆点 [代码] #include<bits/std ...
- 【BZOJ 1590】 Secret Message
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1590 [算法] 字典树 [代码] #include<bits/stdc++.h ...
- 84. ExtJS下页面显示中文乱码问题
转自:https://blog.csdn.net/wenminhao/article/details/51198981 最近在学校extjs是,使用js脚本显示中文在html页面中时,中午出现了乱码的 ...
- C - Xenia and Ringroad
Problem description Xenia lives in a city that has n houses built along the main ringroad. The ringr ...
- javascript事件绑定1-模拟jquery可爱的东西
1.给对象添加事件attachEvent(兼容IE,不兼容ff.chrome) <html xmlns="http://www.w3.org/1999/xhtml"> ...
- (转)vuex2.0 基本使用(2) --- mutation 和 action
我们的项目非常简单,当点击+1按钮的时候,count 加1,点击-1按钮的时候,count 减1. 1, mutation The only way to actually change state ...
- Android第三方微博、无线传输、动画特效、商城应用等源码
Android精选源码 Android汽车助手源码 一个酷炫的Android特效源码 新浪微博的第三方客户端.UI遵循Material Design. Android实现旋转木马布局多种效果 Andr ...
- android黑科技系列——Xposed框架实现拦截系统方法详解
一.前言 关于Xposed框架相信大家应该不陌生了,他是Android中Hook技术的一个著名的框架,还有一个框架是CydiaSubstrate,但是这个框架是收费的,而且个人觉得不怎么好用,而Xpo ...
- 超简单:纯CSS实现的进度条
——————纯CSS实现的进度条—————— HTML: <div class="wrapper"> <div class="bar"> ...