十六进制、二进制及十进制数的区别使用理解
十六进制 二进制
0x01 00000001
0x02 00000010
0x04 00000100
0x08 00001000
0x10 00010000
0x20 00100000
0x40 01000000
0x80 10000000
0x01 00000001
0x02 00000010
0x04 00000100
0x08 00001000
0x10 00010000
0x20 00100000
0x40 01000000
0x80 10000000
没什么特别的东西,就是两个字:整齐,二进制表示太长了,还难得搞清各位是零还是一
十六进制 十进制
0x04000000 67108864
0x08000000 134217728
0x10000000 268435456
0x20000000 536870912
0x40000000 1073741824
0x80000000 2147483648
0x10000000 268435456
0x20000000 536870912
0x40000000 1073741824
0x80000000 2147483648
十进制你一看是个莫名其妙的数,十六进制你一看就清楚2进制是啥,哪一位为1哪一位为0,方便按位操作,比如 |, &
位运算和16进制(其他数制也一样)没关系的。一个数据用16进制表示还是10进制表示,不影响它的值。如果一个数:num
如果某一位为1,比如第3位,那么(num&00000100)就为1,否则为0
所以可以用这个“按位与”运算来判断某一位是否为1。
如果某一位为1,比如第3位,那么(num&00000100)就为1,否则为0
所以可以用这个“按位与”运算来判断某一位是否为1。
比如一个数 #define MASK 3967
这样写,读程序的人一头雾水,需要打开计算器看是个什么
这样写,读程序的人一头雾水,需要打开计算器看是个什么
如果这么些 #define MASK 0x0F7F
那么读者很容易明白倒数第8个字符为0,其余除了高四位都为1,不用打开计算器看了,二进制的话太长,而且还要数,十六进制不用数,一个字符就是4个二进制位
那么读者很容易明白倒数第8个字符为0,其余除了高四位都为1,不用打开计算器看了,二进制的话太长,而且还要数,十六进制不用数,一个字符就是4个二进制位
再看下面的宏:
#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 */
2进制转十进制在线计算器
#define SDL_INIT_EVERYTHING 0x0000FFFF
16进制比较方便转换成二进制、因为c语言非常多的数据运行需要使用位运算、位运算就必然就是要转化成二进制了、那么为什么不直接用二进制呢、估计原因是二进制书写太容易出错了、而且又长、按十六进制和二进制来说、可以一一按位转换、
其中十六进制最经常用的一种场景便是表示状态、比如以上有八种属性、如果迩使用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、每一位十六进制数对应四种状态(十六进制数一位转换成二进制位四位,每位是0是1对应一种状态)、所以通常宏定义的状态只需要使用这四个数字就可以了、比如0x0001、0x0011、0x0081、都ok、像前面的例子、就只使用了1和2两个十六进制数、最好不要使用其它的十六进制数、一来会把每位十六进制的属性表示状态范围缩小、二来不好判断了、但无论什么时候、迩如果想把全部开关都打开、只要0xFFFF就可以了
说明:本文是根据网上大神们的文章整理的,觉得不错,编辑整理分享给大家一起学习理解。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论