将一个字节添加到十六进制数字

时间:2014-05-25 13:29:58

标签: c binary boolean hex

我似乎已经把自己弄得很困惑,以至于这已经没有意义了。

1个字节= 8位。

所以,如果我有一个内存位置,如

0xdeadbeef
3735928559 (base10)
1101 1110 1010 1101 1011 1110 1110 1111

现在,如果我将一个字节添加到0xdeadbeef,那么我添加的二进制序列是什么?是1000吗?如果我加1位,我得到0xdeadbee0,如果我加1位8次,我得到0xdeadbef7。哪个是对的?

我记得微处理器的计数器在PC + = 4时递增,得到0xdeadbef3,所以我不确定哪个是正确答案。

6 个答案:

答案 0 :(得分:4)

我从你的问题中理解的是,你对在计数器中加一点和一个字节感到困惑 由于内存地址是以字节为单位(在编程语言中),因此对它的任何算术运算都以字节为单位进行 要递增计数器,向其添加1就像将其递增到基址旁边的一个字节。将1添加到0xdeadbeef会将其增加到0xdeadbef0

答案 1 :(得分:1)

如果我收集的话,那个东西是一个内存地址,用“基数(零)地址之后的字节数”来衡量,如果在内存中向前移动一个字节,则内存地址会加1。 / p>

可以这样想:如果你以米为单位测量道路起点的距离,如果你向前移动一米(这是你的测量单位),那么从开始的距离增加1。

小心尽管C(和C ++)中的指针工作方式略有混乱(首先):如果指针的类型为T *,则if的每个算术运算都以{{1为单位执行因此,底层内存地址以T

的步长移动

例如,如果你有:

sizeof(T)

答案 2 :(得分:1)

  

我指的是记忆位置。

所以0xdeadbeef是一个地址。如果将其递增1个字节,则只需将其加1即可。 即0xdeadbeef + 1 = 0xdeadbef0

结束看起来向地址增加1位将指针增加1个字节,因为您以字节粒度访问内存并按字节数增加内存。但实际上你添加了数字1(即0x00000001)。如果要增加4个字节,则将4添加到地址,因为内存以字节数为单位进行寻址(单位)。

答案 3 :(得分:0)

什么是添加一个字节? byte需要有价值。 您需要将数字添加到数字中,而不是将数字(8位)添加到数字...

如果您要添加的字节= 0x08 - > 1000二进制,和 0xdeadbeef + 0x08 = 0xdeadbef7

答案 4 :(得分:0)

在计算机中,每个内存位置保存8位(1字节)数据。因此,当我们添加1个字节时,它只会将1个字节添加到内存位置。

答案 5 :(得分:0)

当你给一个字长的地址加 1 时,1 被解释为一个字长的位串,其十进制值为 1。

对于您的情况,0xdeadbeef 有 32 位或 4 个字节。所以加1就像做0xdeadbeef + 0x00000001。添加 300 就像 0xdeadbeef + 0x0000012C

以防万一您想知道是否可以在地址中添加多个字长,这是不可能的,因为地址不能大于或小于字长。