只可以用! ~ & ^ | + << >>这些位操作符,不可以用if等语句 进行这几个小问题的编译
1.byteSwap(int x, int y, int z)
Examples: byteSwap(0x12345678, 1, 3) = 0x56341278
byteSwap(0xDEADBEEF, 0, 2) = 0xDEEFBEAD
这个函数交换第m和第n个byte上的数字
2 logicalShitf(int x,int y)
.Examples: logicalShift(0x87654321,4) = 0x08765432
C中位移运算貌似是算术位移,这里要求进行逻辑位移
3.unsigned float_neg(unsigned uf)
求float数的负数 这道题可以用逻辑判断和if while
C语言位操作问题
答案:1 悬赏:30 手机版
解决时间 2021-02-05 15:55
- 提问者网友:不爱我么
- 2021-02-05 02:31
最佳答案
- 五星知识达人网友:独钓一江月
- 2021-02-05 03:43
函数原型必须做修改.
另外
!
跟
+
并不是位操作符,确定可以使用么?
数组可以用宏来替换掉就是了,反正只有4个。
如果不能用宏,你可以自己手动把宏展开写入代码中
#include
#define tab(x) (\\
x = x | (~((!(x^1))-1))&(8<<16),\\
x = x | (~((!(x^2))-1))&(16<<16),\\
x = x | (~((!(x^3))-1))&(24<<16),\\
x>>16)
int byteSwap(int x, int y, int z)
{
const long mask = 0xFF;
int ty = tab(y);
int tz = tab(z);
int yy = ( x >> ty ) & mask;
int zz = ( x >> tz ) & mask;
int tmp = ty;
tmp = tz;
tmp = ty;
tmp = tz;
x = x & ~( mask << ty ) | ( zz << ty );
x = x & ~( mask << tz ) | ( yy << tz );
return x;
}
int logicalShift(int x,int y)
{
return (int)(((unsigned)x)>>y);
}
float float_neg(float uf)
{
*((int*)&uf) = *((int*)&uf) ^ 0x80000000;
return uf;
}
void main ( void )
{
printf ( "%08X\
", byteSwap(0x12345678,1,3) );
printf ( "%08X\
", byteSwap(0xDEADBEEF,0,2) );
printf ( "%08X\
", logicalShift(0x87654321,4) );
printf ( "%f\
", float_neg(1.24f) );
printf ( "%f\
", float_neg(-6.489f) );
}
另外
!
跟
+
并不是位操作符,确定可以使用么?
数组可以用宏来替换掉就是了,反正只有4个。
如果不能用宏,你可以自己手动把宏展开写入代码中
#include
#define tab(x) (\\
x = x | (~((!(x^1))-1))&(8<<16),\\
x = x | (~((!(x^2))-1))&(16<<16),\\
x = x | (~((!(x^3))-1))&(24<<16),\\
x>>16)
int byteSwap(int x, int y, int z)
{
const long mask = 0xFF;
int ty = tab(y);
int tz = tab(z);
int yy = ( x >> ty ) & mask;
int zz = ( x >> tz ) & mask;
int tmp = ty;
tmp = tz;
tmp = ty;
tmp = tz;
x = x & ~( mask << ty ) | ( zz << ty );
x = x & ~( mask << tz ) | ( yy << tz );
return x;
}
int logicalShift(int x,int y)
{
return (int)(((unsigned)x)>>y);
}
float float_neg(float uf)
{
*((int*)&uf) = *((int*)&uf) ^ 0x80000000;
return uf;
}
void main ( void )
{
printf ( "%08X\
", byteSwap(0x12345678,1,3) );
printf ( "%08X\
", byteSwap(0xDEADBEEF,0,2) );
printf ( "%08X\
", logicalShift(0x87654321,4) );
printf ( "%f\
", float_neg(1.24f) );
printf ( "%f\
", float_neg(-6.489f) );
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯