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;
}