评估C二进制操作

时间:2016-01-22 19:21:05

标签: c binary bitwise-operators

我在C中做了一些逻辑任务,当我手工评估时,一些结果与CodeBlocks打印的结果不同。

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

这里有数字(我不明白用&#34签署的行的输出;<<<<<<<<<"):

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;     <<<<<<

2 个答案:

答案 0 :(得分:3)

class Setup_Info(tk.Frame):
    list1=[]
    list2=[]
    list3=[]
    list4=[]
    def __init__ ...

答案 1 :(得分:2)

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

在前3行之后,k为27.在第四个表达式中,按位AND运算符&的优先级高于按位OR运算符|,因此它等效于27|(7&12);将值转换为二进制为我们提供11011|(00111&01100);内部评估为00100,然后11011|00100评估为11111,即31。

此表达式的值出现在void上下文中(即它未分配给任何内容)并被丢弃。

fp=10/20;

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

fp=(float)10/20;

常量10已投放到float,然后除以20。由于其中一个操作数的类型为float,因此另一个操作数被提升为类型,并执行浮点除法,从而生成0.5。然后将该值分配给fp