结构体问题
#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;这样的结果嘛? data.y>>1的操作是对data.y数值作为二进制右移一位右移一位相当于除以2所以就是3/2 0/2 1/2 100
并不是你想的data.y>>1变为data.a 我猜你是这样想的 “>>”是双目移位运算符,其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。
例如:data.y=3(这是十进制,要把它转换为2进制数11),data.y>>1表示把11右移为01(十进制1)。 >> << 都是操作符对位bit 操作
3== 011(b) >>1 == 01(b)== 1
0 怎么移都是0
1== 1(b) >>1 == 00(b)== 0 lei1996 发表于 2021-6-3 21:06
data.y>>1的操作是对data.y数值作为二进制右移一位右移一位相当于除以2所以就是3/2 0/2 1/2 100
...
嗯嗯,我确实是这样想的,谢谢你的解答 202021130162 发表于 2021-6-3 21:10
“>>”是双目移位运算符,其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移 ...
谢谢你的解答,非常感谢,刚刚竟然没有看到你的回答,抱歉.......
页:
[1]