【发布时间】:2014-06-07 18:57:09
【问题描述】:
我尝试运行以下代码代码:
char c = (2 << 7) >> 7
应该返回 0,因为 2 的二进制表示形式为 char:
0 0 0 0 0 0 1 0
左移 7 次后,我们得到 p>
0 0 0 0 0 0 0 0
然后,经过七次右移,我们得到
0 0 0 0 0 0 0 0
但是,我得到的结果是 2,而不是 0。
编译器说2 << 7 是256,但它是char,所以它不应该是256。
我知道2 << 7 将被计算为ints 并且答案将被放入c 所以256 >> 7 是2。
我尝试将 2 转换为 char(例如:(char)2>>7),但它也不起作用。
我正在尝试从char 中提取每个位,所以我编写了以下代码:
char c = 0x02;
for(int i=0;i<7;i++)
{
char current = (c<<i)>>7;
}
我怎样才能得到每一位?我的方式有什么问题?
【问题讨论】:
-
2<<7不是char。 -
如果您发现问题所在,请不要将您的问题文本替换为“已修复,谢谢”。相反,添加一个解释错误的答案。
-
我忘了,但这肯定是个骗局。
-
@hacks 很好this is similar 但不完全是一个骗局。我相信你会发现很多类似的。我想这取决于您对 dup 一词的严格程度。
-
即使你像
(char)2>>7这样的第一个操作数,由于默认的提升规则,它也不起作用。所有比 int 窄的类型都将自动提升为 int,并且除了在非标准编译器上之外,无法对 char 或 short 等进行数学运算