我有这个表达式返回一个UInt32
:
let randomLetterNumber = arc4random()%26
Run Code Online (Sandbox Code Playgroud)
我希望能够使用此if语句中的数字:
if letters.count > randomLetterNumber{
var randomLetter = letters[randomLetterNumber]
}
Run Code Online (Sandbox Code Playgroud)
这个问题是控制台给了我这个
Playground execution failed: error: <REPL>:11:18: error: could not find an overload for '>' that accepts the supplied arguments
if letters.count > randomLetterNumber{
~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
问题是UInt32
无法与之相提并论Int
.我想投randomLetterNumber
一个Int
.我试过了:
let randomLetterUNumber : Int = arc4random()%26
let randomLetterUNumber = arc4random()%26 as Int
Run Code Online (Sandbox Code Playgroud)
这两个原因 could not find an overload for '%' that accepts the supplied arguments.
如何转换值或在if语句中使用它?
UInt32的最大值是多少?
有没有办法可以使用sizeof运算符来获取最大值(因为它是无符号的)?所以我的代码中最终没有#defines或魔术数字.
什么时候应该使用stdint.h中的数据类型?总是使用它们作为惯例是正确的吗?设计非特定尺寸类型(如int和short)的目的是什么?
Int32
和之间有什么区别UInt32
?
如果它们与容量范围功能相同,那么问题在于UInt32
创建了什么原因?我何时应该使用UInt32
而不是Int32
?
我正在将现有应用程序移植到C#,并希望尽可能提高性能.许多现有的循环计数器和数组引用被定义为System.UInt32,而不是我将使用的Int32.
使用UInt32和Int32有任何显着的性能差异吗?
编辑:此问题已过期,因为Polyfill示例已更新.我在这里留下这个问题仅供参考.阅读关于按位移位运算符的有用信息的正确答案.
题:
在Mozilla Array.prototype.indexOf页面的Polyfill示例中的第7行,他们对此进行评论:
var length = this.length >>> 0; // Hack to convert object.length to a UInt32
Run Code Online (Sandbox Code Playgroud)
但Mozilla上的按位移位规范明确指出运算符返回与左操作数相同类型的值:
移位运算符将其操作数转换为32位整数,并返回与左操作数相同类型的结果.
所以不应该长度接收标准的64位浮点值?或者有人能指出黑客入手的地方?
我有一些低级别的图像/纹理操作,其中32位颜色存储为UInt32或int,我需要在两者之间进行非常快速的按位转换.
例如
int color = -2451337;
//exception
UInt32 cu = (UInt32)color;
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
感谢致敬
我需要创建一个对的唯一标识符的快速,简单的哈希函数uint32_t
值-因此对于相同的散列值(2,7)
和(7,2)
.
任何的想法?
我正在使用遗留嵌入式C代码,它使用关键字定义类型uint8_t, uint16_t
和uint32_t
头文件typedef
.
为了讨论,让我们说该文件typedefs.h
包含这些定义.
在我的新C源模块中,我包括stdint.h
.我还包括其他头文件,包括typedefs.h
层次结构中的某个位置.正如所料,编译器抱怨多个已定义的符号.
我想修改遗留文件,typedefs.h
以便它只声明uint*_t
类型,如果stdint.h
没有包含或更好,如果uint*_t
未定义类型.
我的理解是#ifndef
不能使用,因为typedef
它不是预处理器指令.
那么如何告诉编译器不定义uint*_t
它们是否已经存在(或者是否stdint.h
已经包含)?
注意:如果C规范定义的标准包含头文件的保护定义,这将很容易.
FWIW,我正在使用Green Hills编译器4.24,用于ARM9处理器.