草庐IT

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

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

c++ - 将无符号转换为有符号并返回

我有一个无符号值需要作为有符号值传递给一个函数(它没有被函数触及)。当它出来时,我将它转换回未签名的状态。我知道强制转换为有符号的结果是在溢出时定义的实现,但我至少可以保证在强制转换回它时最终得到相同的值(就像使用函数指针一样)吗?例子:int32_tfunction_with_default(int32_ta_Default){//Trysomestuff//...//Fallbacktodefaultreturna_Default;}voidmain(){uint32_tinput=UINT32_MAX;uint32_toutput=static_cast(function_wit

C++ vector::size_type:有符号与无符号;整数与长

我一直在通过在不同平台上编译我的应用程序来对其进行一些测试,从64位系统到32位系统的转变暴露出许多问题。我大量使用vector、字符串等,因此需要对它们进行计数。但是,我的函数也使用32位无符号数,因为在许多情况下我需要显式使用正整数。我在处理看似简单的任务时遇到了问题,例如std::min和std::max,它们可能更系统化。考虑以下代码:uint32_tgetmax(){return_vecContainer.size();}看起来很简单:我知道一个vector不能有负数的元素,所以返回一个无符号整数是完全合理的。voidsetRowCol(constuint32_t&r_row

c++ - C/C++ - 将 24 位有符号整数转换为 float

我正在用C++编程。我需要将一个24位有符号整数(存储在一个3字节数组中)转换为float(规范化为[-1.0,1.0])。平台是x86上的MSVC++(这意味着输入是小端)。我试过这个:floatconvert(constunsignedchar*src){inti=src[2];i=(i我不完全确定,但我从这段代码中得到的结果似乎不正确。那么,我的代码错了吗?如果错了,为什么? 最佳答案 您不是将24位符号扩展为整数;高位将始终为零。无论您的int大小是多少,此代码都有效:if(i&0x800000)i|=~0xffffff;编

数字IC基础:有符号数和无符号数加、减法的Verilog设计

相关阅读数字IC基础https://blog.csdn.net/weixin_45791458/category_12365795.html?spm=1001.2014.3001.5482        本文是对数字IC基础:有符号数和无符号数的加减运算一文中的谈到的有符号数加减法的算法进行Verilog实现,有关算法细节请阅读原文,本文不会过多谈到原理相关问题。    虽然有符号加减和无符号加减在底层都是使用同样的补码加法器结构,但我们首先分别设计有符号加减法器和无符号加减法器,然后再将其组成一个完整的加减计算单元。    一个有符号数加减法器的Verilog描述如下所示。//本加减法器不涉

Verilog 有符号整数加法计算

        一、m个有符号整数,位宽相同均为n,求它们的和,和的位宽应设置为n+m-1,求和时每个数均扩展m-1个符号位 例1:reg    [3:0]    a;reg    [3:0]    b;reg    [4:0]    sum;always@(posedgeclk)begin    sumend 例2:reg    [3:0]    a;reg    [3:0]    b;reg    [3:0]    b;reg    [5:0]    sum;always@(posedgeclk)begin    sum{2{a[3]}},a[3:0]} +{{2{b[3]}},b[3:0

c++ - 没有兼容的方法来转换相同大小的有符号/无符号

我担心我可能遗漏了一些微不足道的东西,但如果您希望保留原始的无符号值,似乎没有实际安全的方法来转换为有符号类型或从有符号类型转换。关于reinterpret_cast,5.2.10没有列出整数到整数的转换,因此它没有定义(并且static_cast没有定义额外的转换)。在整数转换上,4.7.3基本上表示大型无符号转换将由实现定义(因此不可移植)。这似乎是有限的,因为我们知道,例如,uint64_t在任何硬件上都应该可以安全地转换为int64_t并返回,而不会改变值。如果我们要在两种类型之间memcpy而不是赋值,那么标准布局类型的规则实际上保证了安全转换。我说的对吗?为什么不能在足够大

c++ - 为什么 std::count_if 返回有符号值而不是无符号值?

这个问题在这里已经有了答案:WhydoestheC++standardalgorithm"count"returnadifference_typeinsteadofsize_t?(7个答案)关闭7年前。刚刚意识到std::count_ifreturnsasignedvalue.为什么要这样设计?在我看来,这是没有意义的(结果只能是自然数,即非负整数),因为它不允许做一些简单的事情,比如将这个结果与容器的size()没有得到警告或使用显式类型转换。我真的认为返回类型应该有size_type。我错过了什么吗?

c++ - 为什么 C++ 标准指定在具有混合符号的二进制运算中将有符号整数转换为无符号?

C和C++标准规定,同阶的有符号整数和无符号整数之间的二元运算,有符号整数被强制转换为无符号整数。由此引起的SO有很多问题......我们称之为奇怪的行为:unsignedtosignedconversion,C++ImplicitConversion(Signed+Unsigned),Awarning-comparisonbetweensignedandunsignedintegerexpressions,%(mod)withmixedsignedness等但是这些都没有给出任何理由说明为什么标准采用这种方式,而不是强制转换为带符号的整数。我确实找到了一位自称为大师的人,他说这是显而

c++ - 摆脱有符号和无符号整数表达式之间比较的优雅方法

我有以下模板:一个用于未签名,另一个用于签名。有什么优雅的方法可以在不抑制编译器警告的情况下消除它吗?warning:comparisonbetweensignedandunsignedintegerexpressions我是否需要为每种类型编写函数,例如uint8、uint16等等?template::value,bool>::type=true>voiddebugValidateParameter(XaValueToCheck,YaLowerLimit,ZaUpperLimit){if((aValueToCheck>aUpperLimit)||(aValueToCheck::val