二进制十进制十六进制

二进制十进制十六进制


2024年4月13日发(作者:)

十六进制、二进制及十进制数的区别使用理解

十六进制 二进制

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

十进制你一看是个莫名其妙的数,十六进制你一看就清楚2进制是

啥,哪一位为1哪一位为0,方便按位操作,比如 |, &

位运算和16进制(其他数制也一样)没关系的。一个数据用16进制

表示还是10进制表示,不影响它的值。如果一个数:num

如果某一位为1,比如第3位,那么(num&00000100)就为1,否则为

0

所以可以用这个“按位与”运算来判断某一位是否为1。

比如一个数 #define MASK 3967

这样写,读程序的人一头雾水,需要打开计算器看是个什么

如果这么些 #define MASK 0x0F7F

那么读者很容易明白倒数第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 */

#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就可以了

说明:本文是根据网上大神们的文章整理的,觉得不错,编辑整理分

享给大家一起学习理解。


发布者:admin,转转请注明出处:http://www.yc00.com/web/1712994599a2162876.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信