能力值:
( LV2,RANK:10 )
|
-
-
2 楼
A. 不用说了,显然错的。
B. 大概算了一下,目前无法突破减法的次数限制,用了两次减法。等待高人
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
int xbyte(unsigned word, int bytenum)
{
unsigned y = 0;
y = word << ((3 - bytenum) << 3);
y >>= 24;
unsigned char sign = (y >> 7) << 7;
unsigned char val = (unsigned char)((unsigned char)y << 1) >> 1;
return val - sign;
}
代码写的有点乱,不过貌似结果对的
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
深入理解计算机系统习题还这么有趣,回头买本做一下
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
晕,我以为只能用移位和减法,不能用赋值的。。。能用的那就能做了,先把目标字节用移位方式取干净,然后把该字节原本的符号位用移位方式去掉(这步需要赋值操作),再减去该字节的原始值就ok了。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
发现3L也用了两次减法~
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
嗯,是2次,搞错了
int xbyte(unsigned word, int bytenum)
{
unsigned y = 0;
y = (unsigned char)(word >> (bytenum << 3));
unsigned char sign = (y >> 7) << 7;
unsigned char val = (unsigned char)((unsigned char)y << 1) >> 1;
return val - sign;
}
|
能力值:
( LV13,RANK:530 )
|
-
-
8 楼
显然不能够类型转换,否则不如自定义一个struct,或者拷贝到char[]里面返回[bytenum]好了。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
[QUOTE=foxabu;867265]显然不能够类型转换,否则不如自定义一个struct,或者拷贝到char[]里面返回[bytenum]好了。[/QUOTE]
嗯,改了下
int xbyte(unsigned word, int bytenum)
{
unsigned y = (word >> (bytenum << 3));
y <<= 24;
y >>= 24;
unsigned sign = y >> 7;
sign <<= 8;
return y - sign;
}
|
能力值:
( LV13,RANK:530 )
|
-
-
10 楼
其实这个题的本意是考眼力:
for a machine using two's-complement arithmetic and arithemetic right shifts with
不过@wil的解法也是对滴,在此膜拜一下。
|
|
|