C字节-can';t输出字符(仅8位)

C字节-can';t输出字符(仅8位),c,int,byte,bit,C,Int,Byte,Bit,请看一下我的功能: int getByte(int x, int n) { int oneOnes = 255 << ( n << 3); int compute = oneOnes & x; //FIND A WAY TO RETURN CHAR (NOT INT) char result = (compute >> (n << 3)); return result; } 我只想保留第三组位(从右边开始计数

请看一下我的功能:

int getByte(int x, int n) {
   int oneOnes = 255 << ( n << 3);
   int compute = oneOnes & x;
   //FIND A WAY TO RETURN CHAR (NOT INT)
   char result = (compute >> (n << 3));
   return result;
}
我只想保留第三组位(从右边开始计数),结果是:

 00000000 10011011 00000000 00000000 
所以我成功地做到了这一点。问题是,我只需要返回我想要的位(将零裁剪为
char
)。尽管创建了一个
字符结果
并返回该结果,但返回的仍然是32位的值

有什么帮助吗?谢谢

需要说明的是:对于
00000000 10011011 00000000 00000000
,我只希望返回
10011011


谢谢

是的,它不是8位值,因为函数声明返回
int
,而不是
char
,并且返回的不是结果而是计算。此外,如果您不希望在某处对其进行符号传播,请使用unsigned char作为结果类型:

unsigned char getByte(int x, int n) {
  int oneOnes = 255 << ( n << 3);
  int compute = oneOnes & x;
  //FIND A WAY TO RETURN CHAR (NOT INT)
  unsigned char result = (compute >> (n << 3));
  return result;
}
无符号字符getByte(int x,int n){

int oneOnes=255(n>(n是的,它不是一个8位值,因为您的函数被声明为返回
int
,不是
char
,并且您返回的不是结果而是计算。此外,如果您不希望它在某处进行符号传播,请使用无符号char作为结果类型:

unsigned char getByte(int x, int n) {
  int oneOnes = 255 << ( n << 3);
  int compute = oneOnes & x;
  //FIND A WAY TO RETURN CHAR (NOT INT)
  unsigned char result = (compute >> (n << 3));
  return result;
}
无符号字符getByte(int x,int n){

int oneOnes=255(n>(n基本问题是,您试图使用有符号整数来实现这一点,但有符号整数的移位没有得到很好的定义——每当位模式恰好为负值时,就会发生不好的事情

相反,与执行位操作时通常的情况一样,您希望使用无符号整数:

unsigned int getByte(unsigned int x, unsigned int n) {
  unsigned int oneOnes = 255U << ( n << 3);
  unsigned int compute = oneOnes & x;
  return (compute >> (n << 3));
}
unsigned int getByte(unsigned int x,unsigned int n){

unsigned int oneoneones=255U(n基本问题是,您试图使用有符号整数来实现这一点,但有符号整数的移位并没有得到很好的定义——每当位模式恰好为负值时,坏事情就会发生

相反,与执行位操作时通常的情况一样,您希望使用无符号整数:

unsigned int getByte(unsigned int x, unsigned int n) {
  unsigned int oneOnes = 255U << ( n << 3);
  unsigned int compute = oneOnes & x;
  return (compute >> (n << 3));
}
unsigned int getByte(unsigned int x,unsigned int n){

无符号整数一位数=255U(谢谢,这是一个粗心的输入错误,但在实际的程序中,我让它返回结果作为您的编辑…仍然不是我要查找的字符。但它看起来返回负数…是的,好像
char
的最高有效位为一,则结果为负数。然后将返回类型和/或结果类型更改为
ussigned char
“看起来它返回的是负数”-然后将函数转换为“unsigned char”。顺便说一句,该函数应该对参数n的值执行范围检查。由于返回了一个完整字节,因此位屏蔽是多余的,即
result=x>>(谢谢,这是一个粗心的输入错误,但在实际的程序中,我让它返回结果作为您的编辑…仍然不是我要查找的字符。但它看起来返回负数…是的,好像
char
的最高有效位为一,则结果为负数。然后将返回类型和/或结果类型更改为
ussigned char
“它看起来像是返回负数”-然后将函数转换为“unsigned char”。顺便说一句,该函数应该对参数n的值执行范围检查。由于返回了一个完整字节,因此位屏蔽是多余的,即
result=x>(n
unsigned int getByte(unsigned int x, unsigned int n) {
  return (x >> (n << 3)) & 255U;
}