C程序设置一个数字的MSB和LSB

问题描述 投票:-3回答:1

我必须写一个返回'S'的C程序,如果一个数字的LSB和MSB都被设置,则返回'R',如果没有设置数字的LSB和MSB,如果设置了LSB则返回'L'但不是MSB如果设置了MSB但返回'M'而不是LSB。在这里,我制作了一个只设置LSB的程序,但我对另一个逻辑有问题。请帮我解决一下这个。

#include<stdio.h>
#include<conio.h>

char result;   
char set_reset(unsigned int number)
{

    if(number & 1)

    result='L';


    return result;  // Do not change the return
}

 int main (void)
{
    char result_value;
    result_value = set_reset(150); // it should return 'M'
    result_value = set_reset(11); // it should return 'L'
    result_value = set_reset(171); // it should return 'S'
    result_value = set_reset(42); // it should return 'R'

}
c
1个回答
1
投票

首先,我认为您的功能定义存在问题。你的代码需要一个unsigned int,但在main你写的171将导致S(即MSB和LSB集合)。这不会发生,因为unsigned int超过8位。

所以我的猜测是你想要的:

char set_reset(unsigned char number)
                        ^^^^

在这种情况下,您的程序可能是:

#include <stdio.h>
#include <limits.h>

char set_reset(unsigned char number)
{
    unsigned int lsb = number & 1;
    unsigned int msb = number & (1 << (CHAR_BIT-1));

    if (lsb && msb) return 'S';
    if (lsb) return 'L';
    if (msb) return 'M';
    return 'R';
}

 int main (void)
{
    printf("%c\n", set_reset(150));
    printf("%c\n", set_reset(11));
    printf("%c\n", set_reset(171));
    printf("%c\n", set_reset(42));

}

输出:

M
L
S
R

请注意,limits.h中的CHAR_BIT是char中的位数。通常它是8但不保证。因此最好从limits.h中取出它

© www.soinside.com 2019 - 2024. All rights reserved.