田径项目中属于长跑:关于程序

来源:百度文库 编辑:高校问答 时间:2024/04/30 21:39:47
#include <stdio.h>

#define BLOCK_SIZE 2048
#define BLOCK_MARK 0xFFFFF800
int main(int argc, char *argv[])
{
int size = 3021;
printf("input size:");
scanf("%d", &size);
size = (size + BLOCK_SIZE - 1) & BLOCK_MARK;

printf("%d\n", size);

return 0;
}

程序容易理解,你输入的数字+2048-1后换成二进制或者十六进制与0xFFFFF800相与,将结果以十进制打印出来。

楼上说的是对的,我来进一步具体说一下:

1。“&”是C里的“与”运算符(位运算符的一种),一般的编程中用得不多,在用C写某些与硬件相关的程序时才用。注意与“&&”逻辑运算符相区别。
例:
int a,b;
a=9; //Binary: 1001
b=0xf; //Binary: 1111
printf("%d\n",a & b); // 结果是:9.(即用二进制表示下的每一位进行“与”运算,再把结果输出,不同进制数自动转换为二进制再进行,计算机里所有数据都是这样存储的。)

2.具体在这个程序里,
size = (size + BLOCK_SIZE - 1) & BLOCK_MARK;
0xFFFFF800 用二进制表示为:
1111 ……1111 1000 0000 0000
而1024 用二进制表示为:0100 0000 0000
2048 为 1000 0000 0000
恰好为BLOCK_MARK的最后12位

所以,再来看程序结果就不会奇怪了,运算结果一定是2048的倍数,因为2048的“零头”都被后11位的零"与”掉了。而倍数的大小将取决于你的输入。

3.进一步地讲,C中的位运算符,主要在获得相应位,和输出特定数中应用,比如借助于上面的例子,我们可以进一步写出那些判定输入数据范围的程序,等等。

你要问什么问题啊?