Что означают "&" и "%" в операторах -&, -%, +&, +% в Chisel3?
Я пытаюсь изучить Chisel3 на примере GCD, приведенном на официальной веб-странице. В этом примере используется оператор с именем -%, что это значит? Это не объясняется на странице оператора Wiki. И Cheatsheet говорит "вычитание" как обычный символ вычитания "-".
Тогда в чем же разница между простым вычитанием '-' и процентным вычитанием '-%'?
[редактировать]
Хорошо, я нашел определения этих функций в коде chisel3:
// TODO: refactor to share documentation with Num or add independent scaladoc
def unary_- : UInt = UInt(0) - this
def unary_-% : UInt = UInt(0) -% this
def +& (other: UInt): UInt = binop(UInt((this.width max other.width) + 1), AddOp, other)
def + (other: UInt): UInt = this +% other
def +% (other: UInt): UInt = (this +& other) tail 1
def -& (other: UInt): UInt = binop(UInt((this.width max other.width) + 1), SubOp, other)
def - (other: UInt): UInt = this -% other
def -% (other: UInt): UInt = (this -& other) tail 1
def * (other: UInt): UInt = binop(UInt(this.width + other.width), TimesOp, other)
def * (other: SInt): SInt = other * this
def / (other: UInt): UInt = binop(UInt(this.width), DivideOp, other)
def % (other: UInt): UInt = binop(UInt(this.width), RemOp, other)
def & (other: UInt): UInt = binop(UInt(this.width max other.width), BitAndOp, other)
def | (other: UInt): UInt = binop(UInt(this.width max other.width), BitOrOp, other)
def ^ (other: UInt): UInt = binop(UInt(this.width max other.width), BitXorOp, other)
С оператором & результат вычитания или сложения будет иметь размер самого большого операнда плюс один бит. Но с оператором% результатом операции будет размер самого большого операнда... как с обычным + или -. Тогда в чем разница между - и -% и между + и +%?
1 ответ
Приношу свои извинения за то, что не включил эту информацию на страницу оператора Wiki, я добавлю ее в ближайшее время.
Вы ударили гвоздь по голове с вашей правкой: +&
а также -&
расширяются операторы в том, что ширина результата равна размеру самого широкого операнда плюс 1. +%
а также -%
являются нерасширяющими операторами в том смысле, что ширина результата равна самому широкому операнду.
+
просто псевдонимы +%
в то время как -
псевдонимы -%
,