题
嘿!我在看这个代码 http://www.gnu.org/software/m68hc11/examples/primes_8c-source.html
我注意到,在某些情况下,他们使用六号码,如在线134:
for (j = 1; val && j <= 0x80; j <<= 1, q++)
现在为什么他们使用的0x80?我不擅长六但我发现一个在线hex到小数和它给了我128 0x80。
也之前线134,在线114他们有这样的:
small_n = (n & 0xffff0000) == 0;
Hex到小数点给我4294901760为,十六号。所以,在这里,在这条线,他们正在一点,并比较结果对0??
为什么就不能使用的号码?任何人都可以请解释并请不要给实例其他情况。
此外,我有看到大代码行的,它只是六角的数字,从来没有真正理解为什么:(
解决方案
在这两种情况下你举,位模式的数量是重要的,而不是实际数字。
例如,
在第一种情况下,
j
将1,然后2, 4, 8, 16, 32, 64 最后128作为循环的进展。
在二元,那就是,
0000:0001
, 0000:0010
, 0000:0100
, 0000:1000
, 0001:0000
, 0010:0000
, 0100:0000
和 1000:0000
.
有没有选项二元常数在C或C++,但这一点更加清楚在Hex:0x01
, 0x02
, 0x04
, 0x08
, 0x10
, 0x20
, 0x40
, , 0x80
.
在第二个例子中,
我们的目标是消除下两个字节的价值。所以给予价值的1,234,567,890我们想要结束了与1,234,567,168.
在六角,这是更清楚:开始 0x4996:02d2
, ,结束有 0x4996:0000
.
其他提示
还有一个之间的直接映射hex(或八对于这个问题)的数字和基本位模式,而不是这种情况与小数。一个小数'9'表示不同事对位模式的根据是什么列是在和什么数字围绕着它-它没有直接关系到一位模式。在六,a'9'总是指'1001',无论其列。9 = '1001', 95 = '*1001*0101' 等等。
作为一个痕迹的我的8位天我找到六个方便的缩写什么的二进制。点摆弄是一个垂死的技能。一次(大约10年前)我看到了一个三年网络在大学里只有10%(5 50个左右)人类可计算的一位面具。
一个面罩。六角的价值观使其容易看到潜在的二进制代表性。n& 0xffff0000
返回的前16位正。 0xffff0000
意思是"16 1和16 0s在二元"
0x80
意思是"1000000",所以你开始与"00000001",并继续移位,移到左"0000010","0000100",等等,直到"1000000"
0xffff0000是很容易理解,它的16倍"1"和16次"0"中的一个32位数值,同时4294901760是魔法。
我发现这让人郁闷,C族的语言必须始终支持八和六但不是二进制的。我已经长希望,他们将增加直接支持binary:
int mask = 0b00001111;
多年/工作前,工作时的一个项目,涉及大量的位级的数学,我厌倦了和产生的头文件中所载的定义常对所有可能的二进制数值达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)
它有偶尔取得了一定的位级别的代码的更多的可读性。
有时这些代表的价值在进制代码的更多可读或理解。例如bitmasking或使用的比特变得非显而易见的当看到小数表示的号码。
这有时可以做用的空间量的一个特别值式提供的,因此,也可以发挥作用。
一个典型的例子可能是二进制的设置,所以,而不是使用小数显示一些值,我们使用的二进制的。
让我们说的对象有了一个非独家设置的特性,有的价值或关闭(3)-的一种方式代表国家的那些特性是与3位。
有效的表示是0通过7小,但是这不是那么显而易见的。更明显的是二进制代表:
000, 001, 010, 011, 100, 101, 110, 111
此外,有些人只是非常舒适的有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
可你看到了吗?这是更简单的通过从六至二进制的。
单一的最大使用的六大概是中的嵌入程序。六号码被用来掩盖关闭个别中的位的硬件寄存器,或者分割的多个数值的装成一个单一的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...
有8位字节。六、基16,是简洁。任何可能的字节的数值的表示使用两个字符从收集0..9,加上a,b,c,d,e,f。
基256将更加简洁。每一个可能的字节可能有其自己的单一角色,但大多数人语言的不使用256字,所以Hex是赢家。
要了解的重要性,正在简洁,考虑,早在1970年代,当你想检查你的兆字节的记忆,这是印刷出在六角。打印输出,使用几千页的很大的纸张。八将浪费更多的树木。
为了更加精确、六和十进制的,是所有的数字。基数(基10日,16,等等)的方式存这些数字的方式,要么是清楚的,或者更方便。
当讨论"如何许多的东西在那里是"我们通常使用十进制。当我们正在寻找地址或位模式的计算机制是通常的首选,因为经常的含义的各个字节可能是重要的。
六、(和八)的有财产,他们是权力的两个,所以他们地图集团的位很好。六角的地图4位给一个六角啃(0-F),所以一个字节是存在两个半(00-FF)。八是受欢迎的在数字设备(DEC)和其他机,而一个八位数字地图三位,因此它不跨字节的边界作为很好。
总的来说,选择的基数是一种可以让你的编程更容易使用的一个符合域最好的。
六或十六、数字表示的4位数据,0至15或在六0至F。两个六角的价值观代表一个字节。
在寻找的文件,这是一些非常groady代码。希望你是很好至C和不使用它作为一个教程...
Hex是有用的,当你是直接的工作在位一级或在它之上。例如,工作的一个驱动器里你直接看位来自一个设备和摆弄的结果,以便其他人可以读一致的结果。这是一个相当紧凑简单易读的表示的二进制的。