我必须将int向右移动一位,然后返回。
在Java中,我可以只返回n >> 1;
这在C语言中是可能的吗?
我们得到的方法如下
// Return n after a right circular 1-bit shift
unsigned int right_circular_shift_1(unsigned int n) {
我正在开发一个非常简单的ByteBuffer,用于java1.4。我有一个很小的框架,它基本上只有很差的put/getInt() put/getLong()实现。我的问题是,虽然putInt和getInt可以工作,但getLong() (我想是的)不能工作。
当我读出第四个字节并将其转换为长字节时,它会溢出。但是我所有的变量都很长,所以它不应该溢出。
以下是代码(请记住,这只是一个开始):
public class ByteBuffer {
private byte[] buffer;
private int first = 0;
private int last =
所以我试着用javascript做一些转换和操作数字位的函数。但是,我在我的控制台中发现了以下行为
> var a = 1;
undefined
> a <<= 3
8
> a <<= 55
67108864
> a <<= 40
0
我的问题是,如果数值大于某一点,为什么这个数字会回到零呢?在其他语言(如python )中,数字只是不断增大,或者使用符号来保存数字的值。或者,显示溢出错误。为什么JavaScript简单地将数字重置为零?
我想澄清一下关于比特变换的一些疑问:
使用unsigned intunsigned int i = 500;
i << 24;
据我所知,这会导致unsigned int溢出,这完全可以吗?
C++17 (8.5.7/2) - E1 << E2的值为E1左移E2位位置;空出位为零填充位。如果E1具有无符号类型,则结果的值为E1×2^E2,减少的模值比结果类型中可表示的最大值高。
在signed int上使用右移非常好,只要我的移动量小于'32位‘,因为'int’是我平台上的32位。
int i = 500;
i >>
您将如何在Swift中实现与Java的无符号右移位操作符的等效?
根据的说法,没有符号的右移位操作符">>>“将零移到最左边的位置,而">>”之后的最左边位置则取决于符号扩展。
例如,
long s1 = (-7L >>> 16); // result is 281474976710655L
long s2 = (-7L >> 16); // result is -1
为了在Swift中实现这一点,除了符号位之外,我会执行如下操作,
let lsb = Int64.max + negativeN
int i = 0x000000FF;
i = i << 24;
message = String.format("0x%08X", i);
// prints the message 0xFF000000
int i = 0x000000FF;
i = i << 32;
message = String.format("0x%08X", i);
// prints the message 0x000000FF
我以为第二个会打印0x00000000
怎么一回事?
如何在C中做负数的逻辑右移?基本上,我是在寻找java中>>>的C等价物
即
int one = -16711936 ;
//int two = -16711936 ;
//int three = -1;
int r, g, b;
System.out.println(Integer.toBinaryString(one));
r = one << 8;
r >>>= 24;
g = one << 16;