我是C++的新手,对于下面的代码,我对C++的行为感到困惑:
#include <iostream>
void hello(unsigned int x, unsigned int y){
std::cout<<x<<std::endl;
std::cout<<y<<std::endl;
std::cout<<x+y<<std::endl;
}
int main(){
int a = -1;
int b = 3;
hello(a,b);
return 1
我知道compare(int a, int b)返回1如果a > b,0如果a == b,-1 a < b。当我面对compareUnsigned()时,我不知道它是如何工作的。我在IntelliJ中对该方法的文档进行了一些研究,了解了该方法是如何实现的。
compareUnsigned()静态方法在接收整数x和y作为参数后工作:
public static int compareUnsigned(int x, int y) {
return compare(x + -2147483648, y + -2147483648);
}
有谁能解释一下这个方法与c
在C++引物中,它说:“如果我们为一个无符号类型的对象分配一个范围外的值,结果就是值的剩余部分,即目标类型所能容纳的值的数量。”
它给出了一个例子:
int main(){
unsigned char i = -1;
// As per the book the value of i is 255 .
}
有人能给我解释一下这是怎么回事吗。
我是C#的新手,正在尝试找到一个等效的C#代码来填充dll文件中的int数组。
// in C++
unsigned int MyFunc(unsigned int* ids, unsigned int* size);
//usage of the function in C++
{
//...
unsigned int status = 0;
unsigned int myIds[2000];
unsigned int size = sizeof(myIds) / sizeof(myIds[0]);
//invoke the func
在C++中,您可以获取无符号int的指针,并将其转换为指向有符号int (reinterpret_cast)的指针。
unsigned int a = 200;
int b = *(reinterpret_cast<int *>(&a));
我需要将生成在着色器中的int存储为unsigned int,这样才能将其写入带有无符号整数内部格式的纹理。在GLSL中是否有类似于C++的reinterpret_cast的替代方案?
当我使用g++编译C++程序时
warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for ( int i=0; i< myvec->size(); i++ ){
^
其中myvec是std::vector<float>的对象。
对于迭代std::vector中的元素,我需要处理警告吗?谢谢。
给定以下MASM汇编语言代码:
TITLE Move and add (AddSub.asm)
INCLUDE Irvine32.inc
INCLUDE macros.inc ; for memory dump
.data
x DWORD 0FFF4A348h ; summands
y DWORD 00076540h
z DWORD ? ; sum
.code
main PROC
mov ebx,x
mov eax,ebx
mov ecx,y
add eax,ecx
mov z,eax
以下是c#代码:
static void Main(string[] args)
{
uint y = 12;
int x = -2;
if (x > y)
Console.WriteLine("x is greater");
else
Console.WriteLine("y is greater");
}
这是c++代码:
int _tmain(int argc, _TCHAR* argv[])
{
unsigned i
我知道在C中,将无符号整数转换为有符号整数是定义的,但是对于C++来说是什么呢?我想应该有人已经问过这个了,但我找不到了。
我有一个函数,它操作一个无符号整数,并返回一个相关的无符号整数。我将该函数传递为一个有符号整数,方法是将其转换为类似于int num = -6; unsigned ret = func((unsigned)num); int ret_as_signed = (int)ret;的无符号整数。在Visual中,它工作得很好,但我想知道它的可移植性。
是否有一种可移植的方法将无符号整数转换为有符号整数?它有可能只是逆转有符号整数是如何转换为无符号通过环绕?谢谢
我正在寻找以下代码行的指令(x86机器)或优化:
lock()
int x = ffs(words); // find first bit that set
long words = unset(x, words); // unset the bit "x" in "words"
unlock()
我不知道如何在没有锁定的情况下做到这一点。
在我的c++程序中,我发现assert()调用abort()的情况类似于下面的代码片段: int a = -1;
unsigned int b = 5;
assert(a < b); 作为一个人类,我可以断定-1绝对小于5,不管一个是整数,另一个是无符号整数。为什么编译器不能? 我已经找到了解决方案,那就是这个断言是无意义的,因为无符号总是正的(我有点忘记了我实际代码中的变量是无符号的),但我只是好奇为什么会发生这种情况。
在C++中,编译器提醒我减去无符号值是无符号的,所以调用abs()是没有意义的:
uint64_t a, b;
if (std::abs(a - b) > 10) {
std::cout << "Divergence achieved!" << std::endl;
}
好的,我知道减法是加法,并且我知道在我的实例中,数字将小于2^63,所以我static_cast到int64_t。但是调用abs的目的是为了避免编写
if (a - b > 10 || b - a > 10) {
std::cout << &