草庐IT

GL_UNSIGNED_SHORT

全部标签

c++ - 为什么用short不好

即使在开发人员保证变量永远不会超过一个字节有时甚至两个字节的脚本中也是很常见的;许多人决定对每个可能的变量使用int类型来表示0-1范围内的数字nay。为什么改用char或short会造成如此大的伤害?我想我听到有人说int是“更标准”的类型。这是什么意思。我的问题是数据类型int是否比short(或其他较小的数据类型)有任何明确的优势,由于这些优势,人们过去几乎总是求助于整数? 最佳答案 作为一般规则,C中的大多数算术都是使用int类型执行的(即,普通int,而不是short或长)。这是因为(a)C的定义是这样说的,这与以下事实有

c++ - unsigned long long 与 uint64_t 冲突?

这个问题在这里已经有了答案:longlongintvs.longintvs.int64_tinC++(3个答案)关闭7年前。我们对某些类型参数使用模板特化classmy_template_class:publicmy_template_class_base{....}classmy_template_class:publicmy_template_class_base{....}这与gcc的64位编译完美配合。而当我们尝试32位模式时,它会报告上述两个类的“先前定义”。所以unsignedlonglong在32位编译中与uint64_t相同,但在64位编译中则不同?编译区别是CXX标志

c++ - 我的 For 循环有什么问题?我收到警告 : comparison between signed and unsigned integer expressions [-Wsign-compare]

#include#include#include#includeusingnamespacestd;intmain(){vectorvector_double;vectorvector_string;...while(cin>>sample_string){...}for(inti=0;i 最佳答案 Whyisthereawarningwith-Wsign-compare?正如警告的名称及其文本所暗示的,问题在于您正在比较有符号整数和无符号整数。人们普遍认为这是一次意外。为了避免这个警告,你只需要确保的两个操作数(或任何其他比较运算

c++ - 使用连续无符号整数列表初始化 std::vector<unsigned int>

我想用一种特殊的方法来初始化一个std::vector这在我用作引用的C++书籍中有所描述(如果重要的话,UlrichBreymann的德语书籍'DerC++Programmer')。在那本书中有一个关于STL序列类型的部分,特别提到了list,vector和deque.在本节中,他写道,这种序列类型有两个特殊的构造函数,即如果X指的是这样一种类型,X(n,t)//createsasequencewithncopiesoftX(i,j)//createsasequencefromtheelementsoftheinterval[i,j)我想在unsignedint的间隔内使用第二个,即

c++ - 重载运算符<<(unsigned char typedef as byte)

我想重载(劫持?)ostream和basic_ostream以便它停止尝试将八位字节(无符号字符)显示为可打印字符。我一直住在cout和friend们在屏幕上放笑脸的时间太长了。我厌倦了与Actor一起工作:hex.是否可以覆盖标准行为?我已经尝试过模板和非模板覆盖。它们编译,但似乎没有被调用。 最佳答案 问题是已经有一个templatestd::basic_ostream&operator&,charT);在namespacestd.自basic_ostream也在这个命名空间中,ADL在你输出unsignedchar时选择它.添

c++ - 为什么构造函数在使用 CHAR 类型的参数调用时选择类型 INT 而不是 SHORT?

可以看出,在下面的代码中,正在调用参数类型为int的构造函数。我知道int在这里没问题。但为什么不short呢?作为'A'的ASCII值给出short可以容纳的65。根据什么条件调用数据类型为int的构造函数?#includeclassRightData{intx;public:RightData(shortdata){cout 最佳答案 integralpromotion的结果对于char是int(不是short);和促销(例如char->int)有更高的rankingoverloadresolution中的其他转换(例如char

c++ - 在 C 中类型转换为 unsigned

inta=-534;unsignedintb=(unsignedint)a;printf("%d,%d",a,b);打印-534,-534为什么没有进行类型转换?我预计它是-534,534如果我修改代码为inta=-534;unsignedintb=(unsignedint)a;if(a它不打印任何东西...毕竟a小于b?? 最佳答案 因为您使用%d进行打印。使用%u表示未签名。由于printf是一个可变参数函数,它无法知道参数的类型,而必须依赖于格式说明符。因此,您所做的类型转换没有任何效果。

c++ - C++ 是否允许将任何整数文字隐式转换为 short int?

intmain(){shortn1=8ll;//nowarning//warningC4305:'initializing':truncationfrom'__int64'to'short'//warningC4309:'initializing':truncationofconstantvalueshortn2=88888ll;}我的编译器是VisualStudio2017。根据cppref:Thetypeoftheintegerliteralisthefirsttypeinwhichthevaluecanfit,fromthelistoftypeswhichdependsonwhi

c++ - 如何在 unsigned int 和 int 之间安全地进行 static_cast?

我有一个8字符的string表示一个十六进制数,我需要将它转换为一个int。此转换必须保留字符串"80000000"及更高版本的位模式,即这些数字应为负数。不幸的是,天真的解决方案:inthex_str_to_int(conststringhexStr){stringstreamstrm;strm>val;returnstatic_cast(val);}如果val>MAX_INT(返回值为0),则对我的编译器不起作用。将val的类型更改为int也会导致较大数字为0。我已经尝试了SO上各种答案的几种不同解决方案,但尚未成功。这是我所知道的:我在OpenVMS上使用HP的C++编译器(我相

c语言--unsigned修饰符

在C语言中,unsigned是一种无符号整数修饰符。它可以与多个整数类型(如int、short、long等)结合使用,表示该整数类型只包含非负数值。unsigned修饰的整数类型不保存正负号位,因此可以用来表示更大的正整数范围。例如,unsignedint表示无符号整数,范围从0到UINT_MAX,其中UINT_MAX是标准头文件中定义的该类型所能表示的最大值。它用于表示非负整数,即大于或等于零的整数值。与有符号整数类型(如int)不同,unsignedint没有保存数字的正负号位,因此可以表示更大的正整数范围。一般情况下,unsignedint在内存中使用与int相同的字节大小,但它的取值范