大厂笔试题
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

/*
描述:编写一个温控报警程序,根据给定的三个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;
}