1163028233 发表于 2021-6-3 20:38:22

结构体问题

#include<stdio.h>
struct S{
    int x,y;
};
int main(){
    struct S data={4,3,2,0,8,1};
    int i;
    for(i=0;i<3;i++)
      printf("%d%d;",data.x,data.y>>1);
    printf("\n");
}
这个程序运行完后是41;20;80;
我看
= { struct S
    .x = 4
    .y = 3
}
= { struct S
    .x = 2
    .y = 0
}
= { struct S
    .x = 8
    .y = 1
}
]
是这样的,他是如何得到41;20;80;
按道理不应该是42;28;84;这样的结果嘛?

lei1996 发表于 2021-6-3 21:06:12

data.y>>1的操作是对data.y数值作为二进制右移一位右移一位相当于除以2所以就是3/2 0/2 1/2   100
并不是你想的data.y>>1变为data.a    我猜你是这样想的

202021130162 发表于 2021-6-3 21:10:14

“>>”是双目移位运算符,其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。

例如:data.y=3(这是十进制,要把它转换为2进制数11),data.y>>1表示把11右移为01(十进制1)。

万千只cnm 发表于 2021-6-3 21:22:08

>> << 都是操作符对位bit 操作
3== 011(b)   >>1    == 01(b)== 1
0 怎么移都是0
1== 1(b) >>1   == 00(b)== 0

1163028233 发表于 2021-6-3 21:29:09

lei1996 发表于 2021-6-3 21:06
data.y>>1的操作是对data.y数值作为二进制右移一位右移一位相当于除以2所以就是3/2 0/2 1/2   100
...

嗯嗯,我确实是这样想的,谢谢你的解答

1163028233 发表于 2021-6-3 21:29:48

202021130162 发表于 2021-6-3 21:10
“>>”是双目移位运算符,其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移 ...

谢谢你的解答,非常感谢,刚刚竟然没有看到你的回答,抱歉.......
页: [1]
查看完整版本: 结构体问题