枫静水镜 于 2013-04-22 13:59:07发表:
bucuo
love1800 于 2013-04-21 23:08:08发表:
谢了。我看看!
hstking 于 2013-04-20 19:44:18发表:
抱歉,是我欠考虑。我本意是想左移得到x的最高位。仔细想想,得到最高位得右移才行。但右移又涉及到int的范围。可我还是认为用移位后再与u int与或运算比较方便。毕竟要得到int的位长也很方便,sizeof就可以了。
pl_014 于 2013-04-20 17:10:33发表:
引用:先把x左移一位,然后和u int 0进行与运算。我觉得没问题。而且int和u int也不存在长度问题。 hstking 发表于 2013-4-20 10:02
hstking 于 2013-04-20 10:02:33发表:
先把x左移一位,然后和u int 0进行与运算。我觉得没问题。而且int和u int也不存在长度问题。
Thisyear 于 2013-04-20 08:31:47发表:
纯路过的
pl_014 于 2013-04-19 22:00:14发表:
引用:为什么不直接用与或运算? hstking 发表于 2013-4-19 21:11
hstking 于 2013-04-19 21:11:28发表:
为什么不直接用与或运算?
pl_014 于 2013-04-19 20:08:02发表:
[i=s] 本帖最后由 pl_014 于 2013-4-19 20:12 编辑 [/i]方法一:采用联合[code]union number_int { int a; char b[sizeof(int)]; }; int numok(int numi) { union number_int c; c.a=numi; if(c.b[0]==0xFF) { return 1; } else { return 0; } }[/code]方法二:指针[code] int numok(int numi) { char *a=(char*)&numi; if(*a==0xFF) { return 1; } else { return 0; } }[/code]可以简化为[code]((*(char*)&a)==0xFF)?1:0[/code]此法涉及到指针类型的转换,我并不能肯定一定不会出问题,此法建议谨慎使用。 如果编译器可以使用内联函数(C语言于C99标准后允许使用内联函数),建议实现成内联函数。
枫静水镜 于 2013-04-22 13:59:07发表:
bucuo
love1800 于 2013-04-21 23:08:08发表:
谢了。我看看!
hstking 于 2013-04-20 19:44:18发表:
抱歉,是我欠考虑。我本意是想左移得到x的最高位。仔细想想,得到最高位得右移才行。但右移又涉及到int的范围。可我还是认为用移位后再与u int与或运算比较方便。毕竟要得到int的位长也很方便,sizeof就可以了。
pl_014 于 2013-04-20 17:10:33发表:
你指的是unsigned int与int的长度一致么?为什么说左移一位->与运算就可以做到判断每一个字节是否为全1呢?
hstking 于 2013-04-20 10:02:33发表:
先把x左移一位,然后和u int 0进行与运算。我觉得没问题。而且int和u int也不存在长度问题。
Thisyear 于 2013-04-20 08:31:47发表:
纯路过的
pl_014 于 2013-04-19 22:00:14发表:
在不确定的编译环境下,int型的变量长度属于未知
hstking 于 2013-04-19 21:11:28发表:
为什么不直接用与或运算?
pl_014 于 2013-04-19 20:08:02发表:
[i=s] 本帖最后由 pl_014 于 2013-4-19 20:12 编辑 [/i]
方法一:采用联合[code]union number_int
{
int a;
char b[sizeof(int)];
};
int numok(int numi)
{
union number_int c;
c.a=numi;
if(c.b[0]==0xFF)
{
return 1;
}
else
{
return 0;
}
}[/code]方法二:指针[code]
int numok(int numi)
{
char *a=(char*)&numi;
if(*a==0xFF)
{
return 1;
}
else
{
return 0;
}
}[/code]可以简化为[code]((*(char*)&a)==0xFF)?1:0[/code]此法涉及到指针类型的转换,我并不能肯定一定不会出问题,此法建议谨慎使用。
如果编译器可以使用内联函数(C语言于C99标准后允许使用内联函数),建议实现成内联函数。