小编Ann*_*inn的帖子

未签名到签名转换,在位级别会发生什么?

可能重复:
当二元运算符两边的签名不同时,促销规则如何工作?

当从unsigned整数转换为signed整数时,我知道变量位的表示会发生变化.例如,255可以从转换时成为-1,uint8int8.但是,我从来不确定底层位本身的"强制转换"或"转换"是什么.

我的问题是,整数变量的原始位模式是否保证在有static_cast符号和无符号类型之间保持不变,或者它是否可能以某种方式由强制转换?

出于好奇,static_cast整数标牌类型之间是否生成汇编,或者仅用于编译器知道生成的asm指令是什么?

编辑:

以下是我想要了解的场景示例:

unsigned int uintvar = random();
unsigned int control = uintvar;
assert(control == static_cast<unsigned int>(static_cast<signed int>(uintvar)));
Run Code Online (Sandbox Code Playgroud)

忽略双重演员将被优化掉的事实,这个例子是否会被保证永远保持真实?

c++ integer bit-manipulation

2
推荐指数
1
解决办法
632
查看次数

覆盖标准库使用的内存分配方法?

是否可以覆盖 STL 分配、管理和释放内存的方式?如果可能的话,怎么做呢?有没有一种方法可以将处理原始内存的代码保留在一个类或文件中?

我想为我的整个程序执行此操作,以便我可以跟踪内存使用情况、时间和生命周期信息。当然纯粹是出于好奇!

c++ memory-management stl

2
推荐指数
1
解决办法
4384
查看次数

C++随机数生成,范围[0 ... n],尽可能快速和懒惰?

<random>拥有大量的发动机和配送选项.这很好,但是我阅读的大多数文档都同等重视每个引擎和发行版,并且没有为某些用例建议使用或有用的实例.我通常只是用来rand()快速获取有用的数据,但我正在努力成为一名更好的C++程序员!(另外,rand()在某个范围内获得有用的浮子可能会有时会让自己头痛)

我的问题是,在C++中实例化一个随机数生成器的最快最懒的方法是什么,它会在[0 ... n]范围内做随机数(浮点数,选择一个类型)而没有任何奇怪的惊喜?

编辑:

观看评论中提到的随机演示文稿,我意识到我需要的引擎和分发是mt199937uniform_real_distribution.我不确定哪个是mersenne twister,但看到'mt'现在很明显了.结合这两个概念现在也有意义.以下是我正在使用的其他人遇到的情况:

std::mt19937 randomEngine(seed);
std::uniform_real_distribution<float> range(0, n);

float randomResult = range(randomEngine);
Run Code Online (Sandbox Code Playgroud)

c++ random

2
推荐指数
1
解决办法
379
查看次数

什么是纹理内存,随OpenGL一起分配,受限于?

我正在用OpenGL制作2D游戏。我关心的是纹理内存消耗。2D游戏比3D游戏使用更多的纹理存储量,其中大部分来自动画帧和背景。

显然,程序可以分配多少纹理内存是有限制的,但是由什么决定该限制呢?限制是来自程序的可用常规内存,还是受GPU上可用的视频内存限制?它可以完全使用交换空间吗?显存耗尽时会发生什么?

c++ memory opengl textures

2
推荐指数
1
解决办法
474
查看次数

一个大文件,还是几个小文件?

我正在将3D模型数据写入文件,同时包含许多不同类型的信息(网格,纹理,动画等),大小约为50到100 mb.

我想把所有这些放在一个文件中,但是如果我只需要读取该文件的一小部分来获得我想要的东西,我担心它会花费我.

我应该使用多个较小的文件,还是一个非常大的文件好吗?我不知道文件系统如何处理试图跳转巨型文件,所以我知道迭代大文件可能要么昂贵,要么根本没问题.

另外,如果使用单个大文件,我还有什么特别的事吗?

c++ filesystems stdio

2
推荐指数
1
解决办法
465
查看次数

单独翻译单元中的两个变量违反了一个定义规则?

我有const char * FILENAME = "a/file/name"两个.cpp文件中定义的变量,名为a.cppb.cpp.没有任何内容直接包含这些文件,它们只包含a.hb.h分别包含在自身中.然后包含这两个头文件main.cpp

我的问题是我收到以下链接器错误:

a.obj : error LNK2005: "char const * const FILENAME" (?FILENAME@@3PBDB) already defined in b.obj

我不经常使用文件范围变量,所以我认为这样就可以了......我在这里做错了什么?

c++ linker linker-errors

2
推荐指数
1
解决办法
50
查看次数

OpenGL:OpenGL-ES之外的Triangle Strip中的退化三角形是可以接受的吗?

在OpenGL ES的本教程中,解释了优化模型的技术,其中之一是使用三角形条来定义网格,使用"简并"三角形结束一个条带并开始另一个条带而不结束基元. http://www.learnopengles.com/tag/degenerate-triangles/

但是,本指南非常适用于移动平台,我想知道这种技术是否适用于现代桌面硬件.具体来说,它会受伤吗?它会导致图形伪像还是降低性能(相反将条带分成单独的原型?)

如果它没有造成任何伪影并至少执行,我的目的是仅仅因为它使组织顶点在我想要绘制的某个网格中更容易.

c++ opengl opengl-es

2
推荐指数
2
解决办法
1364
查看次数

从矢量中消除方向

我正在编写一个非常简单的2D碰撞响应算法(幸运的是),但即使是非常简单的几何概念也让我感到困惑.一直在学习!但...

在这种情况下,它的向量:

如果一个物体撞击一块几何体,我想在与几何体壁的法线平行的方向上完全消除该物体的动量.幸运的是,没有任何摩擦或反弹,但即便如此,我仍然不确定如何找到一个能够完全否定正常动量的矢量.

先感谢您!

math geometry 2d vector game-physics

1
推荐指数
1
解决办法
1128
查看次数

确保二进制文件中的浮点数在不同平台上按预期表示?

我有一个存储在文件中的大型浮点数列表,格式如下

0.0010245  0.4624603  1.326266  -5.203623
Run Code Online (Sandbox Code Playgroud)

数字以纯文本形式写出,然后在读入程序时解析为实际浮点数.

我想要做的是缓存4个字节的浮点表示,将其存储为单独的二进制文件,然后在程序的后续运行中使用它而不是原始纯文本.但是,我需要确保平台的字节顺序和格式在运行之间没有变化(如果用户升级,移动文件或只是更改计算机).

所以我有一个测试浮点数写入缓存文件的标题.它存储了4字节的二进制表示-50.50505050(只是一个随机幻数).如果文件中的表示值匹配(在一个小错误中)程序应该是什么,它将使用缓存的文件.如果不是,它将使用原始文件并重新生成另一个缓存文件.

我的问题是,这个测试是否足以确保缓存文件的格式和字节顺序始终正确?

c++ floating-point caching endianness

1
推荐指数
1
解决办法
83
查看次数

OpenGL:16bit内部格式可能类似于Luminence + Alpha吗?

我有一个发光alpha纹理,其中每个像素有两个字节,第一个字节是发光,第二个字节是alpha.

是否可以将其上传到GPU中(在片段着色器中)alpha组件将始终引用alpha,无论使用何种纹理,而不会浪费绿色和蓝色通道的纹理内存?

// fragment shader 
vec4 px = texture(tex, uv);
px.r; // is luminescence
px.a; // is alpha (note that .a is used, not .g which would be green for 32bit RGBA textures)
Run Code Online (Sandbox Code Playgroud)

我想避免使用GL_RG作为内部格式的原因是因为这需要我在着色器中使用32位RGBA纹理的单独代码路径,并且我想避免为不同的纹理类型设置制服/条件.

(如果普通的GPU能够消除G和B通道的内存开销,如果它们是RGBA内部格式的空/冗余,那也没关系)

c++ opengl fragment-shader

1
推荐指数
1
解决办法
76
查看次数