16
|
polygenelubricants · 技术社区 · 15 年前 |
![]() |
1
8
Java和C语言不是完全“高级”的。为了在微基准测试中发光,他们非常努力地将它们编译成有效的代码。这就是为什么它们具有“值类型”,例如
因此,它们模拟硬件的功能。他们稍微修剪了一下 授权 掩蔽,而C只允许它。不过,Java和C语言是“中等水平”的语言。 |
![]() |
2
5
因为在大多数编程环境中,整数只有32位。因此,5位(足以表示32个值)已经足够移动整个整数。对于64位的长度,也存在类似的推理:6位是完全移动整个值所需的全部内容。 我可以理解其中的一部分困惑:如果右边的操作数是一个计算的结果,结果是一个大于32的值,那么您可能希望它只是移动所有的位,而不是应用一个掩码。 |
![]() |
3
5
C和Java定义移位只使用移位计数的低阶位,这是SPARC和X86移位指令所做的。Java最初是由Sun在SPARC处理器上实现的,而C是微软在X86上实现的。 相反,如果移位计数不在0…31(对于32位int),允许任何行为,则C/C++作为移位指令的行为留下未定义的行为。这是因为当C第一次实现时,不同的硬件处理这些问题的方式不同。例如,在VAX上,以负值移动会使另一个方向移动。所以有了C,编译器就可以使用硬件移位指令,做任何它做的事情。 |
|
John Proctor · C中位的掩蔽范围 7 年前 |
![]() |
Jakey · C枚举定义中的按位移位有什么作用? 7 年前 |
![]() |
Areg Sarvazyan · 从无符号int中提取位的函数 7 年前 |
![]() |
goodvibration · 实施安全左移 7 年前 |
![]() |
AesSedai101 · Kotlin'shl'不工作 7 年前 |
![]() |
Sam Hammamy · 如何在位运算中选择正确的左移位? 7 年前 |