草庐IT

c++ - 测试 std::is_integral 和 std::is_signed?

我有一个函数,但我想将它分成两个函数,一个用于返回有符号整数,一个用于返回无符号整数。看起来像std::is_signed不是严格意义上的整数,所以我想我是否可以对类似std::is_integral::value&&std::is_signed::value的东西进行模板测试但这是行不通的。现在我将签名测试作为if语句:templatetypenamestd::enable_if::value,T>::typefoo(){if(std::is_signed::value){//signed}else{//unsigned}}编辑。我使用的是VisualStudio2010。实际上,看

c++ - Qt 将负十六进制字符串转换为有符号整数

我正在读取i2c设备的寄存器,返回值的范围是-32768到32768,有符号整数。下面是一个例子:#i2cget-y30x0b0x0aw0xfec7在Qt中,我得到这个值(0xfec7)并希望将其作为带符号整数显示在QLabel中。变量stringListSplit[0]是一个值为'0xfec7'的QString。//NowupdatethelabelintmilAmps=stringListSplit[0].toInt(0,16);//triedqint32qDebug()问题是无论我尝试什么,我总是得到无符号整数,所以对于这个例子,我得到65223,它超过了指定的最大返回值。我需要

c++ - 为什么 C 编译器不能以直观的方式进行有符号/无符号比较

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。“直觉”是指给定的inta=-1;unsignedintb=3;表达式(a应该评估为1。Stackoverflow上已经有许多问题询问为什么在这种或那种特定情况下C编译器提示有符号/无符号比较。答案归结为整数转换规则等。然而,在比较有符号整数和无符号整数时,为什么编译器必须如此异常愚蠢,似乎没有理由。使用上面的声明,为什么表达式像(a不会自动替换为(a如果

c++ - std::make_signed 接受浮点类型

我有一个只能为标量类型(整数、float等)实例化的模板类,我希望成员typedef始终是该类型的已签名变体。即:unsignedint->signedintsignedlonglong->signedlonglong(已签名)unsignedchar->signedcharfloat->floatlongdouble->longdouble等等……不幸的是,std::make_signed仅适用于整数类型,不适用于浮点类型。最简单的方法是什么?我正在寻找usingSignedT=...;形式的东西,作为我的模板类的一部分,模板参数T已经保证是标量。 最佳答

C++:仅使用无符号类型时有符号/无符号不匹配

当我尝试使用启用了警告级别/W4的VisualStudio2010C++编译器(X86)编译以下C++程序时,我在标记的行收到有符号/无符号不匹配警告。#include#include#includeintmain(intargc,char**argv){size_tidx=42;uint8_tbytesCount=20;//warningC4389:'==':signed/unsignedmismatchif(bytesCount+1==idx){printf("HelloWorld\n");}//nowarningif(bytesCount==idx){printf("HelloW

c++ - C++中有符号到无符号的转换

在C++中,将有符号整数值转换为无符号整数值的结果可以是两种不同的大小(例如:shortint到unsignedlonglongint或longlongint到unsignedchar)由标准和平台独立定义(例如,不管符号整数如何表示)? 最佳答案 是的,该值已定义且独立于所使用的表示形式。[转换积分]/2:Ifthedestinationtypeisunsigned,theresultingvalueistheleastunsignedintegercongruenttothesourceinteger(modulo2nwhere

.net - 警告 C4341 - 'XX' : signed value is out of range for enum constant

在编译我的C++.Net应用程序时,我收到104条警告类型:WarningC4341-'XX':signedvalueisoutofrangeforenumconstantXX可以在哪里字符长位二进制GUID...无论我做什么,我似乎都无法删除这些警告。当我双击它们时,它会将我带到使用OdbcParameters的代码的一部分-当我尝试使用我的所有其他东西但没有OdbcParameters的测试项目时,它不会发出警告。知道如何摆脱这些警告吗?他们从我实际上很难看到的代码中发出真正的警告-知道我的应用程序有104个警告让我感觉很糟糕! 最佳答案

c++ - make_signed<unsigned long>::type 是 int?

我使用的是VisualStudio2010,下面的代码让我有些困惑:#includeautox=std::make_signed::type();x将是int类型,但我预计会很长。我知道VS10中的int和long都是4字节整数。但是即使一个signedlong装进一个int,int对我来说也不是unsignedlong对应的signedinteger类型。所以我的问题是:这是错误/技术错误还是标准规范允许这种结果? 最佳答案 C++1120.9.7.3[meta.trans.sign]描述了make_signed:IfTnames

C++ signed 和 unsigned int 与 long long 速度

今天,我注意到几个简单的按位和算术运算的速度在int之间有显着差异。,unsigned,longlong和unsignedlonglong在我的64位电脑上。特别是,对于unsigned,以下循环的速度大约是其两倍至于longlong,这是我没想到的。intk=15;intN=30;intmask=(1(完整代码here)以下是计时(以秒为单位)(对于g++-O、-O2和-O3):1.834207723(int)3.054731598(longlong)1.584846237(unsigned)2.201142018(unsignedlonglong)这些时间非常一致(即1%的差值)。

c++ - std::is_signed 不适用于强类型枚举:int

谁能解释一下,为什么#include#includeusingnamespacestd;enumE:signedint{a=-1,b=1,};intmain(){std::cout()std::is_signed不做,锡上写的是什么?谢谢... 最佳答案 如果我们查看is_signed的文档它说:IfTisasignedarithmetictype,providesthememberconstantvalueequaltrue.Foranyothertype,valueisfalse.并且枚举不是算术类型,因此结果应该为假。来自C+