联想到c语言中的宏定义:我想是一个原因

如:

#define    SDL_INIT_TIMER        0x00000001
#define SDL_INIT_AUDIO 0x00000010
#define SDL_INIT_VIDEO 0x00000020
#define SDL_INIT_CDROM 0x00000100
#define SDL_INIT_JOYSTICK 0x00000200
#define SDL_INIT_NOPARACHUTE 0x00100000 /**< Don't catch fatal signals */
#define SDL_INIT_EVENTTHREAD 0x01000000 /**< Not supported on all OS's */
#define SDL_INIT_EVERYTHING 0x0000FFFF

答案可能有狠多种、主要原因莪认为是16进制比较方便转换成二进制、因为c语言非常多的数据运行需要使用位运算、位运算就必然就是要转化成二进制了、那么为什么不直接用二进制呢、估计原因是二进制书写太容易出错了、而且又长、按十六进制和二进制来说、可以一一按位转换、

1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111

总得来说16位转化成2进制位相当的简单、只要通过查表就可以得到了、每个十六进制的一位数代表4位二进制数、迩只要记住上面的这个表、任何16进制都狠轻松得到二进制、而不用去整什么乘除法取余的垃圾问题、那些是十进制转二进制的产物、比如

0x4EF  ->  0100 1110 1111

0x4C5596 ->  0100 1100 0101 0101 1001 0110

非常的简单吧、只要记得查表就可以了、简直就像对数查表一样、把乘法转化成加法再查表、哈哈、节省了不少脑细胞、可是这个比对数还好、对数取得的值还是近似值 、这个可是精确值哦

其中十六进制最经常用的一种场景便是表示状态、比如以上有八种属性、如果迩使用8个int、每个int表示一种状态、那又太浪费了、在32位的机 器上一个int可是32位啊、每种状态无非就是开和关、何必呢!1位足以、不是0就是1、如果迩使用bool来表示、虽然是一位、不过判断起来又过于烦 琐、当莪想知道整体8种属性哪些开了哪些关了、得一个一个的去条件if来检测、未免太繁琐了、如果是只存储一个数字里面、用二进制表示、不是一目了然了 么、如

0 0 1 1 0 1 1 1

如果例子的属性和上面的例子从左到右对应的话、只要查看这个状态值的二进制表示就一目了然了、这里把SDL_INIT_TIMER和 SDL_INIT_AUDIO和SDL_INIT_JOYSTICK都关闭了、哈哈、是不是非常的简单、所以定义这8种属性时、其实只需要记4个16进制 数就可以了、它们分别是1、2、4、8、因为转换成二进制刚好是0001、0010、0100、1000、刚好一位十六进制数可以表示四种状态、所以通常 宏定义的状态只需要使用这四个数字就可以了、比如0x0001、0x0011、0x0081、都ok、像前面的例子、就只使用了1和2两个十六进制数、最 好不要使用其它的十六进制数、一来会把每位十六进制的属性表示状态范围缩小、二来不好判断了、但无论什么时候、迩如果想把全部开关都打开、只要 0xFFFF就可以了

为什么android的R类要定义成16进制的更多相关文章

  1. Linux c字符串中不可打印字符转换成16进制

    本文由 www.169it.com 搜集整理 如果一个C字符串中同时包含可打印和不可打印的字符,如果想将这个字符串写入文件,同时方便打开文件查看或者在控制台中打印出来不会出现乱码,那么可以将字符串中的 ...

  2. java 将数字转成成16进制

      java 将数字转成成16进制 CreationTime--2018年6月11日17点11分 Author:Marydon 1.前提 数字必须是byte类型,即[-128,127] 2.代码实现 ...

  3. java中如何将byte[]里面的数据转换成16进制字符串

    原文链接: http://zhidao.baidu.com/link?url=RmLDjr4PtP_oUE5J2pKNZSvlHt1K7HcCh4-03Y7VkXYhJ0kawg01CtKHZc2uB ...

  4. Qt 将字符串转成16进制显示

    最近项目用到了需要将字符串转换成16进制显示.这玩意折腾了一上午. 首先,数据块内容 struct UserData { char Head[3] = {'X','J','J'}; char Flag ...

  5. 解决nginx在记录post数据时 中文字符转成16进制的问题【转载】

    1. 问题描述 nginx 在获取post数据时候,如果是中文,则转换成16进制显示在日志文件中,如下图所示.   Paste_Image.png 日志格式为: log_format postdata ...

  6. ip地址转换成16进制long

    <span style="font-size:18px;">public class IpUtil { /** * ip地址转换成16进制long * @param i ...

  7. java中将汉字转换成16进制

    技术交流群:233513714 /** * 将汉字转换车16进制字符串 * @param str * @return st */ public static String enUnicode(Stri ...

  8. 运用C语言将图片转换成16进制的字符串(base64)

    最近在写手机端的性能测试脚本的时候,发现手机在上传图片数据时,先将图片转换成一堆16进制的字符,将字符传输过去,服务器再将字符解码成图片 我们在loadrunner中测试时,就需要用C语言将图片编码. ...

  9. C#把汉字转换成16进制(HEX)并向串口发送数据

    报警器实例:(有发送,无返回获取) using System; using System.Collections.Generic; using System.Linq; using System.Te ...

随机推荐

  1. PSP编程初探 Hello World

    自己有一台PSP2000,玩了这么长时间的游戏,所以打算去探究一下PSP这个平台的程序的构建方式. 在网上搜了很多资料,感觉能用上的不多,毕竟这太小众了,通过自己的探索,总结了一下. 先搭建MinGW ...

  2. 基于Httpfs访问HDFS的C++实现

    Httpfs是hadoop2.x中hdfs项目的内置应用,基于tomcat和jesery,对外提供完备HDFS操作的RESTful接口,无需安装客户端,可方便实现数据交互,如从windows访问存储在 ...

  3. cadence16.3破解方法

    今天安装cadence16.3,安装了两遍都失败了,百思不得其解,结果总是出现在license上,如下图所示: 后面当然就只能启动demo版了,于是网上找,参照以前古老的法子,终于解决问题! 首先,开 ...

  4. jquery的change 事件

    jquery的change 事件 . <script src="jquery.min.js" type="text/javascript">< ...

  5. 主机win10与虚拟机ubuntu14.04通信

    主机是笔记本win10系统,在virtualbox虚拟机里面安装了ubuntu14.04系统,现在想让它们互联互通. 我的笔记本是通过路由器无线连接接入的互联网,设置了固定ip:192.168.0.4 ...

  6. WPF 绑定五(本身就是数据源)

    xaml: <Window x:Class="WpfApplication1.Window5" xmlns="http://schemas.microsoft.co ...

  7. Redis源码研究--启动过程

    ---------------------6月23日--------------------------- Redis启动入口即main函数在redis.c文件,伪代码如下: int main(int ...

  8. C# 缓存学习第一天

    缓存应用目的:缓存主要是为了提高数据的读取速度.因为服务器和应用客户端之间存在着流量的瓶颈,所以读取大容量数据时,使用缓存来直接为客户端服务,可以减少客户端与服务器端的数据交互,从而大大提高程序的性能 ...

  9. jetty 8.x, 9.x无法加载jstl的PWC6188问题

    参考: cannot load JSTL taglib within embedded Jetty server:http://stackoverflow.com/questions/2151075/ ...

  10. Ios拦截手机短信程序

    引用 1.手机要越狱,没有越狱的话,下面的可以不用看了!  2.IOS 要5.0以上,4.xx的同上  首先,声明下!由于公司移动开发的项目中,需要根据手机的内容进行逻辑处理,也就是要实现手机短信拦截 ...