为什么使用hex?

嘿! 我在http://www.gnu.org/software/m68hc11/examples/primes_8c-source.html查看这段代码

我注意到,在某些情况下,他们使用hex数字,如第134行:

for (j = 1; val && j <= 0x80; j <<= 1, q++) 

现在他们为什么要使用0x80? 我不是hex,但我发现了一个十进制的在线hex,它给了我128个0x80。

在行134之前,在行114上他们有这样的:

 small_n = (n & 0xffff0000) == 0; 

hex到十进制给了我4294901760那个hex数字。 所以在这一行中,他们做了一点AND和比较结果0?

为什么不使用这个号码? 任何人都可以请解释,请举例说明其他情况。

我也看到了大量的代码,只是hex数字,从来没有真正理解为什么:(

在这两种情况下,你都要指出,数字的位模式是重要的,而不是实际的数字。

例如,在第一种情况下,随着循环的进行, j将是1,然后是2,4,8,16,32,64,最后是128。

在二进制中,也就是说,

0000:0001 0000:0010 0000:0100 0000:1000 0001:0000 0010:0000 0100:00001000:0000

在C或C ++中没有二进制常量的选项,但在hex中它有点清晰: 0x02

在第二个例子中,目标是删除值的较低的两个字节。 所以给定一个价值1,234,567,890,我们想最终以1,234,567,168。
在hex中,它更清晰:从0x4996:02d2开始,以0x4996:0000结束。

它有点面具。 hex值可以很容易地看到底层的二进制表示。 n&0xffff0000返回n的前16位。 0xffff0000表示“二进制16 1和16 0”

0x80表示“1000000”,所以以“00000001”开头,继续向左移“0000010”,“0000100”等直到“1000000”

有hex(或八进制数字)数字和底层位模式之间的直接映射,这是不是十进制的情况。 一个十进制的“9”表示与位模式有所不同,它取决于它所在的列和围绕它的数字 – 它与位模式没有直接的关系。 在hex中,“9”总是表示“1001”,不pipe是哪一列。 9 ='1001',95 ='* 1001 * 0101'等等。

作为我的8位天痕迹,我发现hex是一个方便的速记二进制。 位扭曲是一个垂死的技能。 有一次(大约十年前),我在大学看到了一个三年级的networking文件,只有10%(五分之五)的同学可以计算出一个位掩码。

0xffff0000很容易理解,它是一个32位值的16倍“1”和16倍“0”,而4294901760是魔术。

我发现C语言家族总是支持八进制和hex,而不是二进制。 我早就希望他们会join对二进制的直接支持:

 int mask = 0b00001111; 

多年以前,在处理涉及大量位平面math的项目时,我厌倦了并生成了一个头文件,其中包含所有可能的二进制值(最多8位)的已定义常量:

 #define b0 (0x00) #define b1 (0x01) #define b00 (0x00) #define b01 (0x01) #define b10 (0x02) #define b11 (0x03) #define b000 (0x00) #define b001 (0x01) ... #define b11111110 (0xFE) #define b11111111 (0xFF) 

它偶尔会使某些位级代码更具可读性。

有时,hex值的可视化表示使得代码更具可读性或可理解性。 例如,当查看数字的十进制表示时,位掩码或位的使用变得不明显。

有时这可能会影响特定值types所提供的空间量,因此也可能起作用。

一个典型的例子可能是在二进制设置,所以,而不是使用十进制来显示一些值,我们使用二进制。

假设一个对象有一个非排他性的一组属性,其值为on或off(其中3个) – 表示这些属性状态的一种方法是使用3位。

有效表示是十进制的0到7,但不是那么明显。 二元表示更为明显:

000,001,010,011,100,101,110,111

另外,有些人对hex只是很舒服。 还要注意,硬编码的魔术数字就是这样,不pipe编号系统使用什么都不重要

我希望有帮助。

一般来说,使用hex数字而不是十进制,这是因为计算机使用位(二进制数字),当使用位时,使用hex数字也更容易理解,因为从hex变为二进制更容易,从十进制到二进制。

 OxFF = 1111 1111 ( F = 1111 ) 

 255 = 1111 1111 

因为

 255 / 2 = 127 (rest 1) 127 / 2 = 63 (rest 1) 63 / 2 = 31 (rest 1) ... etc 

你能看到吗? 从hex传递到二进制要简单得多。

hex的最大用途可能是embedded式编程。 hex数字用于屏蔽硬件寄存器中的各个位,或将多个数值拆分为单个8位,16位或32位寄存器。

当指定个人位掩码时,许多人开始:

 #define bit_0 1 #define bit_1 2 #define bit_2 4 #define bit_3 8 #define bit_4 16 etc... 

过了一会,他们前进到:

 #define bit_0 0x01 #define bit_1 0x02 #define bit_2 0x04 #define bit_3 0x08 #define bit_4 0x10 etc... 

然后他们学会作弊,让编译器生成这些值作为编译时优化的一部分:

 #define bit_0 (1<<0) #define bit_1 (1<<1) #define bit_2 (1<<2) #define bit_3 (1<<3) #define bit_4 (1<<4) etc... 

更准确地说,hex和十进制都是NUMBERS。 基数(基数10,16等)是以更清晰或更方便的方式呈现这些数字的方法。

在讨论“有多less东西时”我们通常使用十进制。 当我们在计算机上查看地址或位模式时,hex通常是首选的,因为通常单个字节的含义可能是重要的。

hex(和八进制)具有它们是二的幂的属性,所以它们很好地映射了一些分组。 hex将4位映射到一个hex半字节(0-F),所以一个字节存储在两个半字节(00-FF)中。 八进制在数字设备(DEC)和其他较旧的机器上很受欢迎,但是一个八进制数映射到三位,所以它不会很好地越过字节边界。

总体而言,基数的select是一种让您的编程更容易的方法 – 使用与域匹配最好的方法。

一个字节有8位。 hex,hex,十分简洁。 任何可能的字节值都使用集合0..9中的两个字符加上a,b,c,d,e,f来表示。

基地256会更简洁。 每个可能的字节可以有自己的单个字符,但大多数人类语言不使用256个字符,所以hex是胜利者。

为了理解简洁的重要性,考虑一下在20世纪70年代,当你想检查你的兆字节的内存时,它被打印出hex。 打印输出将使用几千页的大纸张。 八方会浪费更多的树木。

hex或hex数字表示4位数据,0到15或hex表示一个字节。

看着这个文件,这是一些漂亮的代码。 希望你擅长C,不要把它用作教程…

hex在直接在比特级或正上方工作时非常有用。 例如,开发一个驱动程序,您可以直接从设备进来的位置查看结果,以便其他人可以读取连贯的结果。 这是一个相当简单易读的二进制表示forms。