private func makeViewFinderMask() -> CAShapeLayer {
let path = UIBezierPath(rect: bounds)
let croppedPath = UIBezierPath(roundedRect: viewFinderBounds(), cornerRadius: viewFinderRadius)
path.append(croppedPath)
path.usesEvenOddFillRule = true
let mask = CAShapeLayer()
mask.path = path.cgPath
mask.fillRule = kCAFillRuleEvenOdd
return mask
}
为什么第一次成功而第二次失败?人们可能会期望它们产生相同的输出。
答案 0 :(得分:1)
十六进制0x80
十进制为128。字节只能保存-128到127之间的值。因此,当您尝试解析值128时,它会失败,因为该值不能表示为byte
。
如果要解析负值,则需要包含一个负号:
System.out.println(Byte.parseByte("-80", 16)); /* Prints -128 */
例如,在执行narrowing conversion,时,从int
到byte
,如本例所示,可能会丢失有关值的整体大小的信息。将int
值转换为byte
只会丢弃除最低8位之外的所有值,因此将int
128转换为byte
会产生-128
。
答案 1 :(得分:0)
第一个运算符是二进制移位。 -128
代表二进制代码中的0b10000000
。 1
向左移动了七次。
在第二个语句中,您使用的基数是hex
个数字,如Tutorialspoint的示例所示。如果您将语句更改为System.out.println(Byte.parseByte("80", 10));
,则不会获得例外。
希望这些解释有所帮助。