要分析这些操作,我们需要理解对象 `a` 和 `b` 的数据类型及其所支持的操作。
- `a = "1984"` 是一个字符串。
- `b = 1984` 是一个整数。
我们就每个选项逐一分析:
### A: `a + a`, `b + b`
- `a + a`:字符串支持拼接操作,所以 `"1984" + "1984"` 是合法的,结果是 `"19841984"`。
- `b + b`:整数支持加法,所以 `1984 + 1984` 是合法的,结果是 `3968`。
### B: `a*2`, `b**2`
- `a*2`:字符串可以进行复制操作,所以 `"1984" * 2` 是合法的,结果是 `"19841984"`。
- `b**2`:整数可以进行指数运算,所以 `1984**2` 是合法的,结果是 `3936256`。
### C: `a - a`, `b[-1]`
- `a - a`:字符串不支持减法操作,因此这个操作会导致错误。
- `b[-1]`:整数不支持索引操作,`b` 作为整数没有索引,因此这个操作会导致错误。
### D: `a[-1]`, `b - b`
- `a[-1]`:字符串支持索引操作,`"1984"[-1]` 是合法的,结果是字符 `'4'`。
- `b - b`:整数支持减法,所以 `1984 - 1984` 是合法的,结果是 `0`。
根据以上分析,正确答案是 **C**:
- 对于 `a`,不能执行的是 `a - a`。
- 对于 `b`,不能执行的是 `b[-1]`。