我想了解glClear功能的深层次.我理解它的一般解释 - >清除颜色,深度,模板和积累的缓冲区,但我还有其他问题.我的朋友假设您清除了代表内存中颜色,深度,模板和积累的位(堆栈?).通过指定和应用参数:(例如,仅颜色和深度)'掩码',您只清除存储器中的那些位(因此"按位操作").
举个例子:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Run Code Online (Sandbox Code Playgroud)
www.khronos.org对"掩码"的参数说明.mask:掩码的按位OR,表示要清除的缓冲区.
这是我的问题:
也许我很困惑,因为我是这个领域的新手.能否请您详尽解释一下?我不想在OpenGL中继续这些问题时跳过这些问题; 我想知道我在做什么,并且这种理解可能会帮助我.谢谢!
int a= 21;//10101
int b = 269;//100001101
Run Code Online (Sandbox Code Playgroud)
a^b 会做
10101
100001101
---------
100011000
Run Code Online (Sandbox Code Playgroud)
但我想做
10101
100001101
---------
001011101
Run Code Online (Sandbox Code Playgroud)
有没有办法在不改变原始数字的情况下做到这一点?
是否存在一组通用规则,通过乘以已知和未知数字来实现某个数字.例如假设x = 13且z = 9
有没有办法找到这样的
x * y = z
=> 13 * y = 9
Run Code Online (Sandbox Code Playgroud)
我不想将它们用作数学整数,而是用于比特.所以,我想保持z为int.显然,位表示中存在溢出,但我不确定如何在没有暴力的情况下找到z强制在32位机器中的所有值.我认为你的数字很小,是负数.
注意:这不是或者是一个新的赋值,因此您可以将x和y更改为任何内容,这些只是示例.
在Java中,按位非运算符(~)反转整数或长整数位.但为什么这不可能double?是否有任何使用此操作的方法double?我正在用Java编写自己的编程语言(这不是一个家庭作业),我相信应该包括双位的按位.
任何使用按位而不是双打的方法?
编辑:这不是如何对浮点数执行按位操作的重复,因为我使用Java而不是讨论过的C.我也知道使用语言的语法没有可能的方法,但是答案似乎把它投到了double一个int.我需要保持双倍的原样,而不是将其改为int或long.
编辑:按位不是我认为不会.它似乎*-1 - 1在输入上执行.因此,我的问题现在变成:
在我的应用程序文档文件夹中,我有一个文件,我试图将每个字节读入一个数组,UInt8其中每个元素代表一个字节。我该怎么做呢?该文件恰好称为 Q1.dat。
这是我失败的尝试:
func readArray() -> [Int]? {
if let arrayPath: String = createArrayPath() {
if let arrayFromFile: [Int] = NSArray(contentsOfFile: arrayPath) as? [Int] {
return arrayFromFile
}
}
return nil
}
func createArrayPath () -> String? {
if let docsPath: String = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last {
return ((docsPath as NSString).stringByAppendingPathComponent("Q1") as NSString).stringByAppendingPathExtension("dat")
}
return nil
}
Run Code Online (Sandbox Code Playgroud) 解决这个问题的解密程序我用Java编写.这是有问题的代码
public static int int_to_int(int input)
{
int[] value_array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26};
int[]bin_array= {00000, 00001, 00010, 00011,
00100, 00101, 00110, 00111,
01000, 01001, 01010, 01011, 01100,
01101, 01110, 01111, 10000, 10001,
10010, 10011, 10100, 10101, 10110,
10111, 11000,11001, 11010, 11011};
for(int i=0; i <27; i++)
{
System.out.println("hello");
if(input==value_array[i])
{
System.out.println("returning: " + bin_array[i] + "at: …Run Code Online (Sandbox Code Playgroud) 我需要长度为 3 的位的排列输出(顺序无关紧要,因为 0 和 1 的初始组合是随机生成的):
[0,0,0]
[0,0,1]
[0,1,0]
[0,1,1]
[1,0,0]
[1,0,1]
[1,1,0]
[1,1,1]
我已经完成了,但似乎有重复,并且没有显示一些可能的排列,我不知道为什么。这是我的代码:
'
ArrayList<Item> itemsAvailable = new ArrayList<Item>();
ArrayList<Integer>bits = new ArrayList<Integer>();
ArrayList<ArrayList<Integer>> tried = new ArrayList<ArrayList<Integer>>();
itemsAvailable.add(new Item(5,4));
itemsAvailable.add(new Item(12,10));
itemsAvailable.add(new Item(8,5));
System.out.println("itemsAvailable: " + itemsAvailable);
Random r = new Random();
//permutations
for(int i = 0; i < Math.pow(2,itemsAvailable.size()); i++){
//Generate random bits
for(int j = 0; j < itemsAvailable.size(); j++){
int x = 0;
if (r.nextBoolean())
x = 1;
bits.add(x);
}
System.out.println("Added to bits …Run Code Online (Sandbox Code Playgroud) 我们假设我们有以下循环:
for (int i = 1; i < 2; i--)
{
cout << i << endl;
}
Run Code Online (Sandbox Code Playgroud)
毫无疑问,这是一个无限的循环.但是,我的问题是,它会运行多长时间?因为我的教授说,鉴于int是4 bytes = 32 bits,它可以存储一个数字-2147483648 to 2147483647.鉴于此,他接着说,在一个for循环中,如果它到达其中一个数字,并且循环仍然被编程为继续(就像这个那样),那么数字将变为正数,条件将满足,终止循环.
我的问题恰恰是:这是怎么发生的?为什么数字-2147483648在for循环中变为+2147483648,为什么+2147483648在for循环中变为-2147483648?因为我曾经认为一旦计数器达到2147483649就会发生分段错误.感谢您的回复!
我正在学习有点操作然后我想到了这一点.假设我有两个数字,第一个在[1,6]的范围内,第二个在[0,3]的范围内.现在第一个数字可以存储最多3个比特,第二个数字可以存储2个比特.我如何使用一个int32将它们都存储在其中.谢谢.
我需要帮助
我被问到对于1到10亿的无符号整数范围,需要多少位!
我们如何计算呢?
谢谢
UPDATE !!!!
这就是我想知道的,因为这个人说17