jjzjj

c++ - c/c++ 左移无符号与有符号

我有这个代码。#includeintmain(){unsignedlonginti=1U打印出来。214748364818446744071562067968在ArchLinux64位、gcc、ivybridge架构上。第一个结果有道理,但我不明白第二个数字是从哪里来的。1表示为4byteintsignedorunsignedis00000000000000000000000000000001当你将它向左移动31次时,你会得到10000000000000000000000000000000没有?我知道左移正数本质上是2^k,其中k是你移动它的次数,假设它仍然在边界内。为什么我得到这么奇

c++ - 当我从 C++ 中的有符号整数中减去无符号整数时会发生什么?

如果我这样做会发生什么:unsignedintu;ints;...s-=u;预期的行为是什么:1)假设无符号整数不是太大而无法放入有符号整数?2)假设无符号整数会溢出有符号整数?谢谢。 最佳答案 一般引用标准中的5/9。在您的示例中,有符号值被转换为无符号(通过取模UINT_MAX+1),然后以UINT_MAX+1为模完成减法以给出未签名的结果。将此结果作为有符号值存储回s涉及标准整数转换-这在4.7/3中。如果该值在signedint范围内,则它会被保留,否则该值是实现定义的。我看过的所有实现都使用模运算将其插入INT_MIN到I

c++ - 为什么 std::(i)ostream 将有符号/无符号字符视为文本而不是整数?

这段代码没有做它应该做的事情:#include#includeintmain(){uint8_tsmall_integer;std::cin>>small_integer;std::cout原因很简单:uint8_t是unsignedchar的类型定义流将此类型视为文本:VisualC++2015实现templateinlinebasic_istream&operator>>(basic_istream&_Istr,unsignedchar&_Ch){//extractanunsignedcharreturn(_Istr>>(char&)_Ch);}还有一个类似的代码转换为char对于

c++ - 为什么 Qt 为其容器类使用有符号整数类型?

问题很明确。我想知道为什么他们甚至认为这会很方便,因为显然负索引在将与它们一起使用的容器中是不可用的(参见示例QList'sdocs)。我以为他们想允许一些疯狂的索引形式,但它似乎不受支持?它还会生成大量(正确的)编译器警告,关于转换为和比较有符号/无符号类型(在MSVC上)。出于某种原因,它似乎在设计上与STL不兼容...... 最佳答案 虽然我非常赞同Chris的推理路线,但我不同意这一点(至少在某种程度上,我是在唱反调)。对大小使用无符号类型没有错,在某些情况下甚至是有益的。Chris对带符号大小类型的解释是,它们自然用作数组

c++ - int 与无符号或有符号相同吗?

int和unsigned还是signed是同一种类型吗? 最佳答案 Plainint与signed相同与signedint相同 关于c++-int与无符号或有符号相同吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3414233/

C++ 中 int、short、long和long long 分别是几位?有符号无符号有什么区别?

在C++中,不同的数据类型表示不同范围的整数值。以下是各种整数数据类型的位数和范围:int:通常为32位,表示带符号的整数,范围约为-2,147,483,648到2,147,483,647。short:通常为16位,表示带符号的短整数,范围约为-32,768到32,767。long:通常为32位,表示带符号的长整数,范围约为-2,147,483,648到2,147,483,647。longlong:通常为64位,表示带符号的长长整数,范围约为-9,223,372,036,854,775,808到9,223,372,036,854,775,807。这些整数数据类型可以是带符号的或无符号的,区别在

ios - Swift 将 Int [int8] 的有符号数组转换为 Int [UInt8] 的无符号数组

如何将[Int8]的有符号数组转换为[UInt8]的无符号数组。letarryData:[Int8]=[-108,11,-107,-14,35,-57,-116,118,54,91,12,67,21,29,-44,111]我只想将上面的这个转换成无符号[UInt8]数组。如何swift实现这一目标。?提前致谢。 最佳答案 如果您打算将带符号的8位整数转换为无符号的具有相同的位表示(例如-1->255):letintArray:[Int8]=[0,1,2,127,-1,-2,-128]letuintArray=intArray.map

objective-c - 在分析从 Swift 编译的二进制文件时,是否可以找出没有符号的函数的 Swift 方法名称?

我是反汇编和逆向工程二进制文件的新手,如果这个问题毫无意义或不可能,请原谅我。过去,当我尝试对macOS二进制文件进行逆向工程时,分析用Objective-C编写的二进制文件会产生很多有用的信息,因为通常所有的Objective-C类及其方法名称都很容易检索,因此弄清楚任何特定方法的作用要容易得多。我正在尝试分析用Swift(从技术上讲是Swift和Objective-C的组合)编写的二进制文件,现在大多数函数都没有符号。我可以像往常一样检索一些Objective-C方法,还有一些函数具有Swift风格的错位名称,但几乎所有其余函数都没有符号。我知道其中很多必须是Swift方法。有没有

java - C# 和 Java 规范在有符号整数溢出时是否阐明了相同的行为?

在C和C++中,有符号整数溢出或下溢的行为是未定义的。在Java和C#(未经检查的上下文)中,行为似乎在一定程度上被定义。根据Java规范,我们有:Theintegeroperatorsdonotindicateoverfloworunderflowinanyway.和:TheJavaprogramminglanguageusestwo's-complementrepresentationforintegers[...]根据C#规范,我们有:[...]Inanuncheckedcontext,overflowsareignoredandanyhigh-orderbitsthatdono

types - 在 Swift 中将有符号转换为无符号

在C中,我可以用数字做一个小把戏:uint8_tvalue=0intdelta=-1uint8_tresult=value+delta/*resultwillbe0xFF*/有没有办法在Swift中做同样的事情?请注意,同样的方法不起作用:letvalue:UInt8=0letdelta:Int=-1varresult:UInt8=value+delta//Error,eventypecastingindifferentways...有没有办法在Swift中获取C的减法行为?谢谢! 最佳答案 所有有符号和无符号整数类型都有一个bit