j******2 发帖数: 362 | 1 书上答案的bit vector是(366页line1)
byte[] bitfield=new byte [0xFFFFFFF/8];(7个F)
是不是不太对?
integer range是2^32,需要的byte数是0x100000000/8(8个0),何故是0xFFFFFFF/8?
而且是不是该考虑负数,把所有整数先(unsigned)再放进bitfield? |
l*****r 发帖数: 393 | 2 0xFFFFFFF是最大可能的signed整数,0xFFFFFFF/8个byte就足够了。
8?
【在 j******2 的大作中提到】 : 书上答案的bit vector是(366页line1) : byte[] bitfield=new byte [0xFFFFFFF/8];(7个F) : 是不是不太对? : integer range是2^32,需要的byte数是0x100000000/8(8个0),何故是0xFFFFFFF/8? : 而且是不是该考虑负数,把所有整数先(unsigned)再放进bitfield?
|
j******2 发帖数: 362 | 3 难道不是
0xFFFFFFF=268435455
INT_MAX=2147483647=0x7FFFFFFF?
还是我哪儿搞错了?
【在 l*****r 的大作中提到】 : 0xFFFFFFF是最大可能的signed整数,0xFFFFFFF/8个byte就足够了。 : : 8?
|
a*******y 发帖数: 1040 | 4 You have to multiply INT_MAX*2, range is INT_MAX-INT_MIN +1 |
j******2 发帖数: 362 | 5 INT_MAX-INT_MIN+1不就是0x100000000吗?
【在 a*******y 的大作中提到】 : You have to multiply INT_MAX*2, range is INT_MAX-INT_MIN +1
|
l*****r 发帖数: 393 | 6 看了原题,应该是8个F.没有signed的问题,就算有也是0x7FFFFFFF
【在 j******2 的大作中提到】 : 难道不是 : 0xFFFFFFF=268435455 : INT_MAX=2147483647=0x7FFFFFFF? : 还是我哪儿搞错了?
|
j******2 发帖数: 362 | 7 为什么没有signed的问题?
P.366 L10
bitfield[n/8]|=1<<(n%8);
在n<0时就会出错(n是从文件读进的int)
how about this:
void print_missing_one_pass(char *file_name)
{
ifstream infile(file_name);
assert(infile);
int size=0x20000000;
char *flag=new char[size];
memset(flag, 0, size);
int i;
while (infile >> i)
{
int byte=(unsigned)i>>3;
int bit=i&7;
flag[byte]|=1<
}
for (unsigned k=0; k
{
char t=flag[k];
if (t!='\xff')
{
for (int j=0; j<8; j--)
{
if (!(t&1<
{
int x=k<<3+j;
cout<
delete [] flag;
return;
}
}
}
}
cout<<"nothing's missing"<
delete [] flag;
return;
}
【在 l*****r 的大作中提到】 : 看了原题,应该是8个F.没有signed的问题,就算有也是0x7FFFFFFF
|