- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 int 类型的变量 i,它的值为 129。我在 gdb 中使用了这个变量的各种表示。
# Decimal format of i
(gdb) p/d i
$18 = 129
# Binary format of i
(gdb) p/t i
$19 = 10000001
# Address of variable i
(gdb) p &i
$20 = (int *) 0xbffff320
# Binary format displayed at one byte
(gdb) x /tb &i
0xbffff320: 10000001
# Decimal format displayed at four bytes (one word)
(gdb) x /dw &i
0xbffff320: 129
# Decimal format displayed at one byte
(gdb) x /db &i
0xbffff320: -127
上面的输出可能是因为 10000001
根据 page 的二进制补码等价于 -127
如果我错了,请纠正我。
据此:
# Size of int in bytes:
(gdb) p sizeof(int)
$22 = 4
我知道 int 在计算机内存中占用 4 个字节。因此,如果我的理解是正确的,那么数字驻留在内存中的某个地址上并占用 4 个字节(或 32 位,或 1 个字或 1/2 个巨字)。然后这个数字的表示是这样的:
AAAAAAAA: XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
在哪里
AAAAAAAA is the location in memory and
XXXXXXXX is the bits of that number (i have divided this bits into four octets for better understanding)
因此,当我访问 int 数字时,我需要知道它的地址以及它消耗了多少位。所以 int 占用 32 位,可以使用 &
运算符获取地址。这是我在内存中的实际 int 表示(顺便说一句,为什么两个不同是与系统上的字节序设置有关还是什么?):
# Binary format displayed as one word (4 bytes) (I have put space between group of 8 bits for better understanding)
(gdb) x /tw &i
0xbffff320: 00000000 00000000 00000000 10000001
# Binary format displayed as four bytes
(gdb) x/4tb &i
0xbffff320: 10000001 00000000 00000000 00000000
现在是一些基础数学:
0xbffff320: 00000000 00000000 00000000 10000001
AAAAAAAA: XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
AAAAAAAA: 8bits 8bits 8bits 8bits
8*3=24
(24)DEC == (0x18)HEX
0xbffff320 + 0x18 = 0xBFFFF338
0xBFFFF338 应该是我最后一个八位字节的地址。那么为什么这给我 11001100
而不是 10000001
?
(gdb) x/tb 0xBFFFF338
0xbffff338: 11001100
我正在打印一个字节。如果我正在打印消耗 4 个字节的整个 int(我不认为这在我的情况下是可能的,因为我没有对应于这个内存的变量名,但你明白了)它可能是一些奇怪的数字,因为我我在声明的变量之后访问内存,可能会有一些垃圾,而且我的 10000001 会驻留在最重要的八位字节中,但为什么是现在?
编辑:根据建议,我添加了 3 个字节而不是之前的 24 个字节,但结果仍然是错误的:
(3)DEC == (3)HEX
0xbffff320 + 0x3 = 0xbffff323
(gdb) x/tb 0xbffff323
0xbffff323: 00000000
仍然没有返回 10000001
这里有什么问题?
最佳答案
看来你已经自己解决了这个问题:
(gdb) x /tb &i
0xbffff320: 10000001 #### Look at the address of this byte ####
# Binary format displayed as four bytes
(gdb) x/4tb &i
0xbffff320: 10000001 00000000 00000000 00000000
# +0 +1 +2 +3
整数以最低有效字节在先的方式存储。其他 3 个字节包含 00000000
大概是这样
(gdb) x/tb 0xbffff320
0xbffff320: 10000001
(gdb) x/tb 0xbffff321
0xbffff321: 00000000
(gdb) x/tb 0xbffff322
0xbffff322: 00000000
(gdb) x/tb 0xbffff323
0xbffff323: 00000000
关于特定内存地址上的内容与 gdb 中的预期不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29286178/
我对java有点陌生,所以如果我犯了一个简单的错误,请原谅我,但我不确定我哪里出错了,我收到的错误是“预期的.class,预期的标识符,而不是声明, ';'预期的。”我尝试了不同的方法,并从这些方法中
This question already has answers here: chai test array equality doesn't work as expected (3个答案) 3年前
我正在学习 Java(对不起,我的英语很差,这不是我的母语),当我在 Eclipse (JavaSE-1.7) 中在我输入的每个“try”中执行“try-finally” block 时,会出现以下消
我收到两个错误,指出 token 上的语法错误,ConstructorHeaderName expected instead & token “(”上的语法错误,< expected 在线: mTM.
我找不到错误。 Eclipse 给我这个错误。每个 { } 都是匹配的。请帮忙。 Multiple markers at this line - Syntax error on token “)”,
代码: import java.awt.*; import javax.swing.*; import java.awt.event.*; public class DoubleIt extends
我正在用 python(Vs 代码)编写代码,但出现此错误: Expected ")" Pylance 错误发生在:def main() 我试着运行我的 main 并将它打印到我的屏幕上。我用谷歌搜
我正在尝试按照 documentation 中的建议使用异步函数。但我收到此错误 意外的 token ,预期 ( async function getMoviesFromApi() { try
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
第一行包含一个表示数组长度的整数p。第二行包含用空格分隔的整数,这些整数描述数组中的每个元素。第三行打印一个整数,指示负数组的数量。 package asgn3; import java.util.*
好的,我是初学者,我必须修复此 java 表达式语言代码才能在我的系统 (Windchill) 中工作,但看起来我在语法中遗漏了一些内容: LWCNormalizedObject lwc =
我无法编译我的程序! 我想我缺少一个花括号,但我怎么也看不出在哪里! import javax.swing.*; import java.awt.*;
我的 jQuery 代码有问题,我的 Firebug 向我发出警告:需要选择器。 这是代码: $("img[id$='_tick']").each(function() { $(this).c
我的新类(class) Fountainofyouth 遇到了问题。尝试构建整个项目后,调试器显示 warning: extended initializer lists only available
我已经从 Java 转向 CPP,并且正在努力围绕构造构造函数链进行思考,我认为这是我的问题的根源。 我的头文件如下: public: GuidedTour(); GuidedTour(string
鉴于以下 for(var i=0; i< data.cats.length; i++) list += buildCategories(data.cats[i]); jsLint 告诉我 Expect
我有这个 json,但 Visual Studio Code 在标题中给了我警告。 [ { "title": "Book A", "imageUrl": "https:
我正在尝试编写一个有条件地禁用四个特殊成员函数(复制构造、移动构造、复制赋值和移动赋值)的包装类,下面是我用于测试目的的快速草稿: enum class special_member : uint8_
所以我用 F# 编写了一个非常简单的程序,它应该对 1000 以下的所有 3 和 5 的倍数求和: [1..999] |> List.filter (fun x -> x % 3 = 0 || x %
我是一名优秀的程序员,十分优秀!