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

时间:2017-12-27 12:58:10

标签: c

我必须编写一个返回'S'的C程序,如果一个数字的LSB和MSB都被设置,则返回'R',如果没有设置数字的LSB和MSB,如果LSB是,则返回'L'如果设置了MSB而不是LSB,则设置但不设置MSB并返回“M”。在这里,我制作了一个只设置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'

}

1 个答案:

答案 0 :(得分: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中取出它。