抱歉如果这听起来有点“新手”的话,但我不知道c ++,当我看一些关于perlin噪声的代码时,尝试弄清楚它是什么时,我遇到了
& 0x7fffffff
和
(n << 13) ^ n;
我不知道那些意味着什么。我确实知道0x7fffffff是十六进制,但我不知道 & 是什么意思。任何帮助?
& 0x7fffffff
和
(n << 13) ^ n;
我不知道那些意味着什么。我确实知道0x7fffffff是十六进制,但我不知道 & 是什么意思。任何帮助?
n=n*2^13; t=(longnumbers)/2^31;
? - SDuke&
是C++中的位运算与操作符
位运算与操作符(&)将第一个运算数的每一位都与第二个运算数的对应位进行比较。如果两者的位都为1,则对应结果位设置为1,否则设置为0。
11111111 11110000
& 00000000 01100011
_________________
00000000 01100000
<<
是C++中的位左移运算符
<<
运算符将第一个操作数向左移动由其第二个操作数给出的位数,填充新的0位于右侧。
0 1 0 1 0 1 1 0 << 2
_____________________
0 1 0 1 0 1 1 0 0 0
^
是 C++ 中的异或运算符。
位异或运算符将其第一个操作数的每个位与其第二个操作数的相应位进行比较。如果一位为 0,另一位为 1,则相应的结果位将被设置为 1。否则,相应的结果位将被设置为 0。
0 1 0 1 0 1 1 0
^ 0 0 1 1 0 0 1 0
___________________
0 1 1 0 0 1 0 0
因此,& 0x7fffffff
将32位整数的第31位设置为零,并保留其他位的值。
(n << 13) ^ n
中,n
左移 13
位,然后将结果与 n
进行异或操作。
&
是按位与运算符。所以 & 0x7fffffff
可以从一个32位整数中去掉有符号位。这意味着它将 int
的最左边的位变为零。
在第二个例子中,首先使用左移操作符 <<
将 n
左移13位,然后将此表达式的结果与 n
本身进行异或运算。
& 0x7fffffff
的含义是将(假定为)32位整数的第31位设置为零,保持第0到30位的值不变;也就是说,将32位整数设为正数;换句话说,取整数的绝对值。
(n << 13) ^ n;
的含义是先将 n
左移13位,然后用左移后的值异或原始的 n
值。
希望这能有所帮助。