非常简单的问题,伙计们,但也许我只是忘记了一些事情。
在64位linux中,long是8字节正确吗?
如果是这种情况,并且我想设置第 64 位,我可以执行以下操作:
unsigned long num = 1<<63;
然而,每当我编译这个时,它都会给我一个错误,说我左移的幅度超过了宽度。
另外,如果我想获取 long 类型的前 32 位(不带符号扩展),我可以这样做:
num = num&0xFFFFFFFF;
或者关于:
num = (int)(num);
谢谢。
在64位linux中,long是8字节正确吗?
不必如此。取决于编译器而不是底层操作系统。检查这个以获得良好的讨论。整数的大小由什么决定? https://stackoverflow.com/questions/9689049/what-decides-the-sizeof-an-integer
然而,每当我编译这个时,它都会给我一个错误,说我是
左移超过宽度
这个大家都已经回答了。使用1UL
另外,如果我想取一个的前 32 位long类型(无
签名扩展),我可以这样做:
num = num&0xFFFFFFFF;
or what about:
num = (int)(num);
num = num&0xFFFFFFFF
。这将为您提供较低的 32 位。但请注意,如果long
在你的系统上只有 4 个字节,那么你会得到整个数字。来到标志扩展部分,如果您使用过long
并不是unsigned long
那么你就不能去掉符号扩展位。例如,-1
从第 0 位开始表示为全 1。如何通过屏蔽来避免这些问题?
num = (int)(num)
将为您提供较低的 32 位,但编译器可能会通过溢出异常警告,如果num
不适合int
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)