草庐IT

Unsigned

全部标签

c++ - 如何在 C++ 中指定 unsigned char 类型的整数文字?

我可以指定一个unsignedlong类型的整数文字,如下所示:constunsignedlongexample=9UL;对于unsignedchar我该如何处理?constunsignedcharexample=9U?;这是避免编译器警告所必需的:unsignedcharexample2=0;...min(9U?,example2);我希望避免我目前拥有的冗长解决方法,并且没有在调用min的行中出现“unsignedchar”而不在单独的行上的变量中声明9:min(static_cast(9),example2); 最佳答案 C+

c++ - 我可以将 unsigned char 转换为 char ,反之亦然吗?

我想使用一个需要这样数据的函数:voidprocess(char*data_in,intdata_len);所以它实际上只是在处理一些字节。但是当涉及到原始字节时,我更喜欢使用“unsignedchar”(它以某种方式“感觉”只处理正的0到255值更合适),所以我的问题是:我是否可以始终安全地将unsignedchar*传递给此函数?换句话说:是否保证我可以随意在char和unsignedchar之间安全地转换(转换)而不丢失任何信息?我是否可以随意在指向char和unsignedchar的指针之间安全地转换(强制转换)而不丢失任何信息?奖励:C和C++中的答案是否相同?

c++ - std::is_unsigned<bool>::value 定义是否明确?

我想知道是否std::is_unsigned::value是否按照标准定义好?我问这个问题是因为typenamestd::make_unsigned::type没有很好的定义。 最佳答案 bool没有签名的概念.来自[basic.fundamental]/6:Valuesoftypeboolareeithertrueoffalse.[Note:Therearenosigned,unsigned,short,orlongbooltypesorvalues.—endnote]Valuesoftypeboolparticipateinin

c++ - 结构或 union 中的 'unsigned temp:3' 是什么意思?

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:WhatdoesthisC++codemean?我正在尝试使用JNA将C结构映射到Java。我遇到了一些我从未见过的东西。struct定义如下:structop{unsignedop_type:9;//--->whatdoesthismean?unsignedop_opt:1;unsignedop_latefree:1;unsignedop_latefreed:1;unsignedop_attached:1;unsignedop_spare:3;U8op_flags;U8op_private;};您可以看到像u

c++ - 什么时候 uint8_t ≠ unsigned char?

根据C和C++,CHAR_BIT>=8。但是每当CHAR_BIT>8时,uint8_t甚至都不能表示为8位。它必须更大,因为CHAR_BIT是系统上任何数据类型的最小位数。在什么样的系统上,uint8_t可以合法地定义为unsignedchar以外的类型?(如果C和C++的答案不同,那么我想两者都知道。) 最佳答案 如果存在,uint8_t必须始终与unsignedchar具有相同的宽度。但是,它不必是同一类型;它可能是一个不同的扩展整数类型。它也不需要与unsignedchar具有相同的表示;例如,可以以相反的顺序解释这些位。这是

c++ - 为什么 argc 是 'int' (而不是 'unsigned int' )?

为什么命令行参数计数变量(传统上是argc)是int而不是unsignedint?这有技术原因吗?在尝试摆脱所有已签名的未签名比较警告时,我总是忽略它,但从不明白为什么会这样。 最佳答案 原来的C语言在默认情况下任何变量或参数都被定义为int类型,这可能是另一个因素。换句话说,您可以:main(argc,char*argv[]);/*seeremarkbelow...*/而不是intmain(intargc,char*argv[]);编辑:实际上,正如Aaron提醒我们的那样,最原始的语法应该类似于main(argc,argv)ch

c++ - unsigned long long 有多少字节?

unsignedlonglong有多少字节?和unsignedlonglongint一样吗? 最佳答案 执行摘要:64位或更大。unsignedlonglong与unsignedlonglongint相同.它的大小取决于平台,但由C标准(ISOC99)保证至少为64位。没有longlong在C89中,但显然甚至MSVC都支持它,所以它非常便携。在当前的C++标准(2003年发布)中,没有longlong,尽管许多编译器支持它作为扩展。即将推出的C++0x标准将支持它,并且它的大小将与C中的相同,因此至少为64位。您可以使用表达式si

c++ - 如何处理 "signed/unsigned mismatch"警告 (C4018)?

我使用了很多用c++编写的计算代码考虑到高性能和低内存开销。它大量使用STL容器(主要是std::vector),并且几乎在每个函数中都迭代这些容器。迭代代码如下所示:for(inti=0;i但它会产生signed/unsignedmismatch警告(VisualStudio中的C4018)。用一些unsigned类型替换int是个问题,因为我们经常使用OpenMPpragma,它要求计数器是整数.我即将取消(数百个)警告,但恐怕我错过了一些优雅的问题解决方案。在迭代器上。我认为迭代器在适当的地方应用时很棒。我正在使用的代码never将随机访问容器更改为std::list或其他东西(

c++ - 为什么 sizeof(unsigned double) 等于 4?

我的一个同事问有没有unsigneddouble,我说没有,但我还是查了一下,编译到MicrosoftVisualC++2010:unsigneddoublea;doubleb;printf("size_a=%dsize_b=%d",(int)sizeof(a),(int)sizeof(b));它输出size_a=4size_b=8。即unsigneddouble为4个字节,double为8个字节。 最佳答案 unsigneddouble无效。在MSVC中也是如此。在启用警告的MSCV2010中编译上述代码时,您会得到:警告C407

C++ 风格从 unsigned char * 转换为 const char *

我有:unsignedchar*foo();std::stringstr;str.append(static_cast(foo()));错误:invalidstatic_castfromtype‘unsignedchar*’totype‘constchar*’在C++样式中转换的正确方法是什么? 最佳答案 char*和constunsignedchar*被认为是不相关的类型。所以你想使用reinterpret_cast。但是,如果您要从constunsignedchar*转换为非const类型,则需要先使用const_cast。re