D.i*_*con 2 language-design bit-shift swift
当我试图在我的RGB颜色实验上移位时,我注意到我无法移动可变数量的位.
Swift书只说你向左/右移动"一个数字"
"按位左移运算符(<<)和按位右移运算符(>>)根据下面定义的规则,将一个数字中的所有位向左或向右移动一定数量的位置."
是故意只能移动预定义数量的位吗?
// Works fine:
let shiftMe: UInt32 = 0xFF0000
let shiftedConst = shiftMe >> 16
// Doesn't work:
let shiftMe: UInt32 = 0xFF0000
let shiftValue:Int = 16
let shiftedConst = shiftMe >> shiftValue
Run Code Online (Sandbox Code Playgroud)
第二个示例将不会编译并抛出此错误:
无法找到接受所提供参数的">>"的重载
快速设计是这样的吗?它是一个bug并修复beta3?(我还在beta2 atm.)
移位计数的类型必须与要移位的值的类型相匹配.
shiftValue必须申报UInt32.
let shiftMe: UInt32 = 0xFF0000
let shiftValue:UInt32 = 16
let shiftedConst = shiftMe >> shiftValue
Run Code Online (Sandbox Code Playgroud)
如果移位计数类型是UInt8,UInt16,uInt32或uInt64(甚至是签名版本),IMO它应该没有任何区别,因为移位范围小于任何这些类型.此外,这是一个既不记录也不直观的不必要的绊脚石.
错误消息无益且不正确:
错误:: 39:20:错误:'UInt32'无法转换为'UInt8'
让shiftConst = shiftMe >> shiftValue
| 归档时间: |
|
| 查看次数: |
1635 次 |
| 最近记录: |