为什么android的R类要定义成16进制
联想到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进制的更多相关文章
- Linux c字符串中不可打印字符转换成16进制
本文由 www.169it.com 搜集整理 如果一个C字符串中同时包含可打印和不可打印的字符,如果想将这个字符串写入文件,同时方便打开文件查看或者在控制台中打印出来不会出现乱码,那么可以将字符串中的 ...
- java 将数字转成成16进制
java 将数字转成成16进制 CreationTime--2018年6月11日17点11分 Author:Marydon 1.前提 数字必须是byte类型,即[-128,127] 2.代码实现 ...
- java中如何将byte[]里面的数据转换成16进制字符串
原文链接: http://zhidao.baidu.com/link?url=RmLDjr4PtP_oUE5J2pKNZSvlHt1K7HcCh4-03Y7VkXYhJ0kawg01CtKHZc2uB ...
- Qt 将字符串转成16进制显示
最近项目用到了需要将字符串转换成16进制显示.这玩意折腾了一上午. 首先,数据块内容 struct UserData { char Head[3] = {'X','J','J'}; char Flag ...
- 解决nginx在记录post数据时 中文字符转成16进制的问题【转载】
1. 问题描述 nginx 在获取post数据时候,如果是中文,则转换成16进制显示在日志文件中,如下图所示. Paste_Image.png 日志格式为: log_format postdata ...
- ip地址转换成16进制long
<span style="font-size:18px;">public class IpUtil { /** * ip地址转换成16进制long * @param i ...
- java中将汉字转换成16进制
技术交流群:233513714 /** * 将汉字转换车16进制字符串 * @param str * @return st */ public static String enUnicode(Stri ...
- 运用C语言将图片转换成16进制的字符串(base64)
最近在写手机端的性能测试脚本的时候,发现手机在上传图片数据时,先将图片转换成一堆16进制的字符,将字符传输过去,服务器再将字符解码成图片 我们在loadrunner中测试时,就需要用C语言将图片编码. ...
- C#把汉字转换成16进制(HEX)并向串口发送数据
报警器实例:(有发送,无返回获取) using System; using System.Collections.Generic; using System.Linq; using System.Te ...
随机推荐
- VirtrualBox 搭建本地lamp环境
1.VirtrualBox安装Centos6.8 minimal VirtrualBox新建个虚拟机配置好内存以及硬盘大小,安装即可: 网络方式是 NAT(默认)和桥接方式来实现,最好在安装前设置好, ...
- ThoughtWorks FizzBuzzWhizz 代码实现
当时拉钩网ThoughtWorks出了一道面试题(https://www.jinshuju.net/f/EGQL3D),本人用PHP实现了一下,当时忘记了把代码分享出来,今天特来补上. FizzBuz ...
- Golang container/ring闭环数据结构的使用方法
//引入包 import "container/ring" //创建闭环,这里创建10个元素的闭环 r := ring.New(10) //给闭环中的元素附值 for i := 1 ...
- Delphi 二次开发 CorelDRAW
我们首先通过一个简单的程序例子来看一下Delphi对CorelDRAW二次开发有什么样的效果.本程序实现CorelDRAW程序的打开和关闭. 1.1 Delphi与CorelDRAW连接 在程序与Co ...
- pyQuery的安装
1. 直接通过pip安装 你会发现lxml怎么搞都报错,后来单独先安装libxml2和libxslt pip是找不到这个包的,只好百度.发现有很多的例子的解决方案.后来发现了个实用的. 2. 先安装l ...
- About Curah
相信下列场景对您来说一点都不陌生:您遇到一个问题,花了好几个小时在网上搜寻解答和可靠的技术内容.即使前往许多技术博客和论坛翻箱倒柜后,还是无法确定要相信谁,也不知道该选哪个答案. Curah! 网站就 ...
- spring-mysqlclient开源了
https://github.com/risedragon/spring-mysqlclient/wiki/spring-mysqlclient-user-guide 开源了一个项目,总结了几年的数据 ...
- 【quartz】 入门
把技术债务给还了,首先来一个最简单的demo: 2.x版比1.x有很多改进,1.x基于fw1.2: 2.x基于fw3.5以上:语法上有很大的不同,摒弃了很多1.x的很多东西: 直接以2.x来demo ...
- API网关
API网关 最开始只是想找个API网关防止API被恶意请求,找了一圈发现基于Nginx的OpenResty(Lua语言)扩展模块Orange挺好(也找了Kong,但是感觉复杂了点没用),还偷懒用Vag ...
- oracle 常用SQL语法手册
Select 用途: 从指定表中取出指定的列的数据 语法: SELECT column_name(s) FROM table_name 解释: 从数据库中选取资料列,并允许从一或多个资料表中,选取一或 ...