C++使用一种按位的函数:我会得到重复的值吗?
这是我的 C++ 函数,它使用一种按位:
int genkey(const unsigned char a,const char b,const char c )
{
int val=0;
unsigned char *p= reinterpret_cast <unsigned char *>(&val);
p[0]=a;
char *q= reinterpret_cast <char *>(&val);
q[1]=b;
q[2]=c;
return val;
}
我使用它来生成键(对象的唯一值)。
可以传递给函数的值的范围是: 对于参数 => [0..255],对于 b 参数 => [0..127] 且对于 c 参数 => [0..127]。
假设使用相同的三个参数值只能调用该函数一次。例如,只有一次调用的值为 (10, 0, 0)。
函数是否返回重复值?
谢谢。
this is my C++ function that uses a kind of bitwise:
int genkey(const unsigned char a,const char b,const char c )
{
int val=0;
unsigned char *p= reinterpret_cast <unsigned char *>(&val);
p[0]=a;
char *q= reinterpret_cast <char *>(&val);
q[1]=b;
q[2]=c;
return val;
}
I'm using that for generating keys (unique value for object).
The range of the values that can be passed to the function are: for a parameter => [0..255], for b parameter => [0..127] and for c parameter => [0..127].
Assume that the function can be called only once with the same three arguments values. For example there will be only one call with values (10, 0, 0).
Does function return duplicated values?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您的函数可能会为每个唯一的输入值集返回唯一的值(假设您的
int
至少为 24 位宽)。然而,更好的编写方法可能是:将三个 8 位值组合成一个 24 位值,而不使用难以读取的指针操作。
请注意,在转换
char
值(可能是signed char
,具体取决于您的编译器设置)之前,我已小心地将它们转换为unsigned char
。原因是移位首先会将值提升为有符号int
,这可能涉及符号扩展。你不会想要那样的。Your function probably returns unique values for each unique set of input values (assuming your
int
is at least 24 bits wide). However, a better way to write this might be:This combines three 8-bit values into a single 24-bit value without using hard-to-read pointer manipulation.
Note that I have taken care to cast the
char
values (which might besigned char
depending on your compiler settings) tounsigned char
before shifting them. The reason is that shifting will first promote the value to a signedint
, which may involve sign extension. You won't want that.您的代码将在不同的架构上给出不同的结果。当然,也许这并不重要。
这是一个便携式等效项:
或者这样:
Your code will give different results on different architectures. Maybe that doesn't matter, of course.
This is a portable equivalent:
Or this:
在任何我能想到的合理机器上,唯一的输入值将产生唯一的结果。
On any reasonable machine that I can think of unique input values will produce a unique result.