25. Pack Multiple Fields into a 16-bit Control Register

Back To All Submissions
Previous Submission
Next Submission

Code

#include <stdio.h>
#include <stdint.h>

void pack(uint16_t* reg, uint8_t mode, uint8_t speed, uint8_t status) {
	*reg |= (mode & 0x07);
	*reg |= ((speed & 0x1F) << 3);
	*reg &= ~(0x0003 << 8);
	*reg |= ((uint16_t)(status & 0x3F) << 10);
}

int main() {
	uint8_t mode, speed, status;
	scanf("%hhu%hhu%hhu", &mode, &speed, &status);
	uint16_t reg = 0;
	pack(&reg, mode, speed, status);
	printf("%u", reg);
}

Solving Approach

 

 

 

Was this helpful?
Upvote
Downvote