2016-01-22 43 views
-8

我正在做一些在C中的逻辑任务,而我手工评估一些结果不同于CodeBlocks打印的结果。评估C二进制操作

将以前执行的指令考虑在内的以下表达式的十进制值是什么?

我这里还有数字(我不懂行输出与 “< < < < < < < <” 签字):

int i, j, k, *p2i; 

float fp; 

p2i=&k; 

i=0x22; 

j=025; 

k=25; 

++k; 

k++; 

k|7&12;   <<<<< 

fp=10/20;   <<<<<< 

fp=(float)10/20;  <<<<<< 
+3

您不明白16个操作中的3个;真的有必要包括你在你的问题中理解的13个吗? – mah

+2

这是不必要的神秘和难以遵循。 (你从什么剪切和粘贴它?)请只显示你不明白的表达,说出你期望他们给予什么,以及你得到了什么。 –

+2

可能需要注意的事项:&更高的优先级,|,整数除法给出整数结果。 – pticawr

回答

2
k=25; 
++k; 
k++; 
k|7&12; 

第3行后, k是27.在第四个表达式中,按位与运算符&比位运算符具有更高的优先级,所以它等效于27|(7&12);转换的值以二进制为我们提供了11011|(00111&01100);内部部分的计算结果为00100,然后11011|00100计算结果为​​,其是31.

这个表达式的值出现在一个void上下文(即它没有被分配给任何东西)并被丢弃。

fp=10/20; 

常数1020都是int类型。因此执行整数除法,结果为0.然后将该值转换为float并分配给fp

fp=(float)10/20; 

恒定10浇铸到float,然后通过20划分。由于其中一个操作数的类型为float,所以另一个操作数被提升为类型并执行浮点除法,结果为0.5。然后将该值分配给fp

+0

非常感谢你@dbush 而不是11011的外部值我一直在计算11000。 – mjrdnk

3
k|7&12; ==> 27|7&12 ==> 27|4 ==> 31 (discarded value) 

fp=10/20; ==> fp=0 ==> 0 (fp is now 0.0) 

fp=(float)10/20; ==> fp=10.0f/20 ==> fp=0.5f (fp is 0.5)