草庐IT

UNSIGNED_INT

全部标签

c++ - 如果我尝试在 C++ 中将大于 pow(2,64)-1 的值分配给 unsigned long long 会怎样?

如果我有两个unsignedlonglong值,比如pow(10,18)和pow(10,19),我将它们相乘并将输出存储在另一个unsignedlonglong类型的变量中……我们得到的值是显然不是答案,但它有任何逻辑吗?每次我们尝试使用任意大的数字时,我们都会得到一个垃圾类型的值,但是输出与输入值有任何逻辑吗? 最佳答案 C++中的无符号整数类型遵循模运算规则,即它们表示对2N取模的整数,其中N是数字整数类型的值位(可能小于其sizeof倍CHAR_BIT);具体来说,该类型包含值[0,2N)。因此,当您将两个数字相乘时,结果是数

c++ - 在 C++ 中比较 char 和 Int

在C++中,由于隐式类型转换,可以将int与char进行比较吗?还是我误解了这个概念?比如,我能不能做intx=68;chary;std::cin>>y;//Assumingthattheuserinputs'Z';if(x还是我们需要先将其转换为int?所以if(x(y)){cout 最佳答案 两个版本的问题是您无法确定由负值/大值产生的值(如果char确实是符号字符)。这是实现定义的,因为实现定义了char是指signedchar还是unsignedchar。解决此问题的唯一方法是首先转换为适当的有符号/无符号char类型:if

c++ - 将 int[][] 分配给 int**

这个问题在这里已经有了答案:HowdoIusearraysinC++?(5个答案)关闭8年前。据我所知,在某些情况下,数组会转换为指向其第一个元素的指针:inta[5];int*p;p=a;按照这种方法并考虑到我可以将数组分配给指针,为什么我不能将二维数组分配给指向指针的指针?inta[5][5];int**q;q=a;但是,我可以将指针数组分配给指向指针的指针:int*p[5];int**q;q=p;如果将数组转换为指向其第一个元素的指针,则在第二个示例中发生q=a时,a应该是指向a[0]的指针,而a[0]应该是指向a[0]的指针[0],对吧?此外,如果我这样做,我不会收到错误:co

c++ - int[n][m],其中 n 和 m 在运行时已知

我经常需要创建一个二维数组,其宽度和高度(让它们为n和m)在编译时未知,通常我这样写:vectorarr(n*m);我手动访问元素:arr[j*m+i]我最近被告知我可以改写:intarr[n][m]//nandmstillonlyknownatruntime.所以这里有2个问题:C++标准允许这种行为吗?我应该如何将这样的数组传递给函数?g++报告arr的类型为int(*)[n],但同样,n是动态的,在声明它的函数之外是未知的(main)。 最佳答案 您所询问的功能(尺寸仅在运行时已知)是C++的非标准扩展,而是C.99的标准扩展

c++ - 如何将 unsigned char[] 转换为 std::vector<unsigned char>

我正在尝试将其传递给我的项目的另一部分,该部分要求它是一个vectorunsignedcharvch[65];unsignedintsize()const{returnGetLen(vch[0]);}constunsignedchar*begin()const{returnvch;}constunsignedchar*end()const{returnvch+size();std::vectorRaw()const{return(vch,vch+size());}我得到了错误couldnotconvert'(constunsignedchar*)(&((constCPubKey*)th

c++ - 隐式转换将符号 'int"更改为 'unsigned int"

我正在使用clang++编译程序,我需要在clang++中正确编译它。我在其他编译器上没有错误。代码中的错误行是memset(grid_,0,sizeof(int)*x_quadrants*y_quadrants);整个函数是这样的:Ocean::Ocean(intnum_boats,intx_quadrants,inty_quadrants){grid_=newint[x_quadrants*y_quadrants];memset(grid_,0,sizeof(int)*x_quadrants*y_quadrants);x_quadrants_=x_quadrants;y_quadr

c++ - 将 float 转换为 int,还是将 int 转换为 float?

我可以将常量定义为float或32位uint:constfloatSecondsPerMinute=60.0F;或constuint32SecondsPerMinute=60U;const用在一些期望int的方程和一些期望float的方程中。我想让我的编译器和静态分析工具满意,所以我会根据需要将其static_cast为适当的类型。是将const定义为float并转换为int更好,还是将其定义为int并转换为float?这有什么不同,还是这更多是个人意见?假设常量与int和float的使用次数相同。 最佳答案 模板怎么样:templ

c++ - 如何通过 unsigned long 将 std::shared_ptr 传递给回调?

我有一个旧的C风格库,它使用带有unsignedlong作为用户参数的回调,我想将我的shared_ptr传递给回调,以便增加引用计数。voidcallback(unsignedlongarg){std::shared_ptrptr=???arg???}voidstarter_function(){std::shared_ptrptr=std::make_shared();unsignedlongarg=???ptr???//passtolibrarysoitmaybeusedbycallback}目前我在shared_ptr上使用get(),然后使用C风格的强制转换,但这会在star

c++ - std::future<neither::Either<int, std::string>> 段错误

本题中的代码使用了Either在这里找到实现:https://github.com/LoopPerfect/neither.明确地说,我怀疑这是这个特定库的问题,否则我会在那里制造问题。以下代码段按预期工作:std::futuref=std::async(std::launch::async,[](){return"test";}std::cout下面会产生一个段错误:std::future>f=std::async(std::launch::async,[](){returnneither::Either(neither::right(std::string("test")));})

c++ - 使用/Wp64 编译时如何在没有警告的情况下将 strlen 的结果转换为 int

intl=strlen(s);警告C4244:“=”:从“__w64int”到“int”的转换,可能会丢失数据我需要用内联函数替换strlenintl=new_strlen(s);但是我如何在没有警告且不使用pragma的情况下将strlen的结果移植到int中?我可以保证我的字符串中不超过20亿个字符!所有像reinterpret_cast、static_cast这样明显的事情也会产生错误或警告。编辑:啊。c风格的转换:(int)确实有效。我一直坚信它没有。 最佳答案 constchar*str="Hello";intlen=st