signed | unsigned | |
---|---|---|
>>(逻辑右移) | 左侧补0 | 左侧补0 |
>>>(算术右移) | 左侧补符号位 | 左侧补0 |
<<(逻辑左移)和<<<(算术左移) | 右侧补0 | 右侧补0 |
有符号数的>>>(算术右移)左侧补符号位,其他移位都是补0 。
signed与unsigned不同类型的赋值,单纯的将对应的二进制复制过去,所谓的有符号数据和无符号数,本质上是对二进制的不同解释而已。
不等位宽的赋值,应该先将对应的bit补齐或者截断,有符号数高位扩展填充符号位,有符号数直接从二进制进行截断。
reg signed [7:0] m =8'h80;
reg [15:0] n ;
initial begin
n=m;//预计16‘hFF80
end
如果未定义为signed,则默认为unsigned。