You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1.7 KiB
36 lines
1.7 KiB
/*
|
|
描述:编写一个温控报警程序,根据给定的三个32位寄存器的值reg1、reg2、reg3,以及报警调值 alarm 进行判
|
|
断,其中,reg1的第八位为状态位,状志位置1,表示传感器失效,reg2的0~3位为高位,reg3 的第 24~31位为
|
|
:位。温度寄存器的精度为0.1,范围为[-204, 204],需要计算温度的值,并判断温度是否大于报警调值,如果大于报
|
|
警闯值,则输出tue,否则输出false。状态位置1,直接输出ture
|
|
输入:reg1、reg2、reg3 的值(无符号32位整数,16进制表示),以及报警阈值alam(32 位有符号整数,10进
|
|
制表示)。输出:布尔值,表示温度是否大于报警值。
|
|
输入:88 18000A1F 12345678 120
|
|
解释:根据给定的奇存器值,可以提取温度的高位为0x,低位为0x12,计算得到温度值为181.8、由于温度值大于输出:tue报警阈值 120,因此输出 tue.
|
|
|
|
输入:88 12000a1a df12fe2d 120解释;根据给定的寄存器值,可以提取温度的高位为0xa,低位为0xd,计算得到温度值为74.3。由于温度值小于编出:false报警國值 120,因此输出false。
|
|
*/
|
|
#include <bits/stdc++.h>
|
|
using namespace std;
|
|
|
|
int main() {
|
|
unsigned int reg1,reg2,reg3;
|
|
cin >> hex >> reg1 >> hex >> reg2 >> hex >> reg3;
|
|
int alarm;
|
|
cin >> dec >> alarm;
|
|
if(reg1 & 0x100){
|
|
cout << "true" << endl;
|
|
cout << "111" << endl;
|
|
}
|
|
else{
|
|
reg2 &= 0x0f;
|
|
reg3 &= 0xff000000;
|
|
reg3 = reg3 >> 24;
|
|
reg2 = reg2 << 8;
|
|
unsigned int tmp = (reg2 + reg3);
|
|
unsigned int tmp2 = tmp - 0x7f8;
|
|
if(tmp2 > alarm*10)cout << "true" << endl;
|
|
else cout << "false" << endl;;
|
|
}
|
|
return 0;
|
|
}
|