2014-09-04 11 views
7

Trong C, tôi có thể làm một thủ thuật với những con số:chuyển đổi ký hợp đồng với unsigned trong Swift

uint8_t value = 0 
int delta = -1 
uint8_t result = value + delta /* result will be 0xFF */ 

Có một cách để làm điều tương tự trong Swift? Lưu ý rằng cách tiếp cận tương tự không hoạt động:

let value: UInt8 = 0 
let delta: Int = -1 
var result: UInt8 = value + delta // Error, even typecasting in different ways... 

Có cách nào để có được hành vi của C đối với chất nền trong Swift?

Cảm ơn!

Trả lời

22

Tất cả các loại nguyên signed và unsigned có một constructor bitPattern:, mà tạo ra một số unsigned từ một ký (hoặc ngược lại) với đại diện bộ nhớ cùng:

let delta: Int8 = -1 
let result: UInt8 = UInt8(bitPattern: delta) // 0xFF = 255 
+0

Tính năng này hoạt động. Cảm ơn! – George

+0

Chỉ cần một chỉnh sửa, tôi thấy: 'UInt8 (bitPattern: Int8 (delta))' là cần thiết thay vì đơn giản 'UInt8 (bitPattern: delta)' (hoặc delta cần phải là Int8). – George

+0

@George: bạn đã đúng, đã sửa chữa. –

6

(Tôi nghĩ ví dụ của bạn hơi lệch. 0 - -1 là 1. Tôi tin rằng câu trả lời này là những gì bạn nghĩ đến).

Bạn muốn để loại trừ vào tràn với &- điều hành:

let value: UInt8 = 0 
let delta: UInt8 = 1 
let result: UInt8 = value &- delta 

Có những điều tương tự bạn có thể làm với các & nhà khai thác khác như &+, &* vv Thậm chí có một &/ xử lý chia số không.

+0

Oh! Xin lỗi ... Mã đã sai (nhập quá nhanh ...). Nó được sửa ngay bây giờ. – George

+2

Với mã mẫu đã sửa, câu trả lời khác hoạt động tốt hơn, nhưng đây là thông tin hữu ích. Cảm ơn! – George

Các vấn đề liên quan