理解__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++虚函数的问题,当时其实就看懂了,最近笔试中遇到了虚函数竟然不太确定,所以还是理解的不深刻,所以想通过这篇文章来巩固下. 装逼一刻: 最近,本人思想发生了巨大的转变,在大学的时候由 ...
随机推荐
- C# 操作 INI 自己工作笔记(对文本框的操作)
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- vs code golang代码自动补全
“go.useCodeSnippetsOnFunctionSuggest”: true 文件-->首选项--->设置--->用户设置 添加下行:然后就可以自动补全了,包括() “go ...
- Human Gene Functions(dp)
http://poj.org/problem?id=1080 #include <stdio.h> #include <stdlib.h> #include <strin ...
- html5 历史管理
1.onhashchange:改变hash值来进行历史管理. <!DOCTYPE html> <html> <head> <meta charset=&quo ...
- MySQL学习笔记之内连接
不多说,直接上干货! MySQL的内连接 #内连接,两个表按照条件匹配 select class1.stuid,class1.stuname,class1.sex,course from class ...
- hbase无法启动,The node /hbase is not in ZooKeeper
问题详细描述如下: 2016-12-09 15:10:39,160 ERROR [org.apache.hadoop.hbase.client.ConnectionManager$HConnectio ...
- RabbitMQ 官方NET教程(一)【介绍】
本教程假定RabbitMQ已在标准端口(5672)上的localhost上安装并运行.如果使用不同的主机,端口或凭据,连接设置将需要调整. RabbitMQ是一个消息代理:它接受并转发消息. 您可以将 ...
- 《CSS Mastery》读书笔记(2)
第二章 目标的样式 要用CSS样式化一个HTML元素,必须要定位一个元素, CSS的选择器就是这样的手段. 这章中,你要学到的 • Common selectors 普通选择器 • Advanc ...
- java Queue中 remove/poll, add/offer, element/peek区别
offer,add区别: 一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝. 这时新的 offer 方法就可以起作用了.它不是对调用 add() 方法抛出一个 unche ...
- 使用CMD建立指定格式的文件
一.建立空文件的几种方法1.cd.>a.txtcd.表示改变当前目录为当前目录,即等于没改变:而且此命令不会有输出.>表示把命令输出写入到文件.后面跟着a.txt,就表示写入到a.txt. ...