C++ C++;从函数返回无符号字节

C++ C++;从函数返回无符号字节,c++,C++,我试图显示函数中的无符号字节。我在函数中返回的字节与我在CLI中显示它时看到的值不同。我使用以下代码: #include <iostream> #include <bitset> typedef unsigned char Byte; typedef unsigned int Uint; Byte makeMask(Uint pos) { switch (pos) { case 0: return 10000000; case 1:

我试图显示函数中的无符号字节。我在函数中返回的字节与我在CLI中显示它时看到的值不同。我使用以下代码:

#include <iostream> 
#include <bitset>

  typedef unsigned char Byte;
typedef unsigned int Uint;

Byte makeMask(Uint pos) {
  switch (pos) {
  case 0:
    return 10000000;
  case 1:
    return 01000000;
  case 2:
    return 00100000;
  case 3:
    return 00010000;
  case 4:
    return 00001000;
  case 5:
    return 00000100;
  case 6:
    return 00000010;
  case 7:
    return 00000001;
  }
}

int main() {
  //Variabelen aanmaken
  Uint pos;
  Byte source;

  //Om een int tussen 0 en 7 blijven vragen totdat deze is ingevoerd
  do {
    std::cout << "Vul een getal tussen de 0 en de 7 in: ";
    std::cin >> pos;
  } while (pos < 0 || pos > 7);

  //Om een source mask vragen
  std::cout << "Vul een source in: ";
  std::cin >> source;

  //Functies callen en printen
  Byte magic = makeMask(pos);
  std::bitset < 8 > meme(magic);
  std::cout << "Getrokken mask: " << meme << std::endl;

  std::cout << "Getrokken mask: " << makeMask(pos) << std::endl;

  return 0;
}

为什么第一种方法中的位位于错误的位置,为什么使用第二种方法时我看不到任何输出?

您可能希望简化
makeMask
以使用位移位,而不是
开关

uint8_t makeMask(size_t bit_position)
{
  return 0x80 >> bit_position;
}
用二进制显示数字的方法有很多。在internet上搜索“c++二进制到文本”

编辑1:

您可以使函数内联或用单个语句替换函数调用。这将比调用一行函数更有效。

10000000
是一个整型文字,其值不适合
char
其他值也不适合字节,请参见此处:值00001000是一个八进制值,而不是二进制、十六进制或十进制。
typedef无符号char字节-是一件事,你知道。不需要诡计和自定义typedef。如果要指定二进制数(从C++14开始),请使用
0b
前缀。“可以将函数内联…这比调用一行函数更有效”-
inline
只不过是一个编译器提示(大多数人都会忽略它),不管怎样,编译器很可能会内联一行函数,即使它不内联,它在现实生活中也几乎不重要,除了非常热的路径/循环。保持简单易读。信任优化器。和配置文件,如果您有实际的性能问题。
uint8_t makeMask(size_t bit_position)
{
  return 0x80 >> bit_position;
}