我正在研究一个将64位(用于某些计算)和32位(用于节省空间的存储)无符号整数混合的程序,所以这是非常重要的,算术避免溢出移位和算术中的位宽度C
下面是一个例子问题
我想位移位1的unsigned N久的离开了,但是我想要的结果是为unsigned long long。这将在if语句中的比较操作中使用,因此不会进行任务分配。我会给你一些代码。
void example(unsigned long shift, unsigned long long compare)
{
if((1<<shift)>compare)
{
do_stuff;
}
}
我怀疑这不会做我想做的事,那么下面做我想做的事?
void example(unsigned long shift, unsigned long long compare)
{
if(((unsigned long long)1<<shift)>compare)
{
do_stuff;
}
}
如何对这些东西的位宽进行微操作?哪一个操作数决定了操作执行的位宽,还是两者中的较大者?
另外,我想运行的是如何工作的其它操作太多,如果可能的话,比如+ * /%等
或许与此信息资源的引用将是很好了,我不能似乎在任何地方都能清楚地找到这些信息。或者规则很简单,只需发布即可。我不确定。
'如果((1 <比较)'这将无法在大多数商店代码审查使用的空间,让您的代码可读性 –
“我怀疑这会不会做我想做的。” - 而不是怀疑,为什么不a)阅读你的语言标准或手册,并b)尝试它?我看起来很好。 “如果可能的话,我希望尽可能减少其他操作的效果,例如+ * /%等。” - 同样的答案。在互联网之前,人们阅读书籍。 –