【发布时间】:2018-07-29 20:27:33
【问题描述】:
我写了一个程序来解决下面的练习。我的小时和分钟是正确的,但我的秒数是错误的。
为了节省磁盘空间目录项中的时间字段为2 字节长。占小时的不同位的分布, 分和秒如下:
15 14 13 12 11|10 9 8 7 6 5| 4 3 2 1 0 H H H H H| M M M M M M| S S S S S编写一个 C++ 程序,它接受输入的两字节时间条目和 使用合适的适当分隔小时、分钟和秒 位运算符。
#include<iostream>
using namespace std;
int main()
{
unsigned int hours, mins, secs;
unsigned int time;
cout << "enter time ";
cin >> time;
hours = (time >> 11);
mins = ((time << 5) >> 10);
secs = ((time << 11) >> 11);
cout << hours << " " << mins << " " << secs << endl;
return 0;
}
为了获得分钟,我将输入向左移动 5 个位置,希望消除所有 H 位,然后向右移动 10 个位置以消除所有 S 位并获得 @ 987654325@ 最右边的位。
几秒钟也是如此。
但是,如果我输入 445,我希望结果是 13 分 29 秒,但程序会输出 0 13 445。
为什么小时和分钟显示正确,而秒却不正确?
【问题讨论】:
-
“以下问题”——哪个问题?
-
"cannot get my seconds right" – 你认为什么是“正确的”?你会得到什么?
-
您能否举例说明如何使用它:输入的内容、期望的输出内容以及实际得到的内容?
-
((time<<11)>>11)&9是的,这似乎不对。 -
如果用户正在输入时间,您可能需要比位移更小心。至少对我来说,尚不清楚时间的格式。没有什么可以确保他们只输入数字、十六进制、十进制、24 或 12 小时制、上午/下午等。
标签: c++ bit-manipulation bit masking