题解 | #多功能数据处理器#

多功能数据处理器

https://www.nowcoder.com/practice/e009ab1a7a4c46fb9042c09c77ee27b8

`timescale 1ns/1ns
module data_select(
	input clk,
	input rst_n,
	input signed[7:0]a,
	input signed[7:0]b,
	input [1:0]select,
	output reg signed [8:0]c
);
always@(posedge clk or negedge rst_n)begin
	if(!rst_n)begin
		c<=9'b0;
	end
	else begin
		case(select)
		0:begin
			c<=a;
		end
		1:begin
			c<=b;
		end
		2:begin
			if(a[7]==b[7])
				c<=a+b;
			else 
				c<=(a[6:0]>b[6:0])?{{a[7]},{a[6:0]-b[6:0]}}:{{b[7]},{b[6:0]-a[6:0]}};
		end
		3:begin
			if(a[7]==b[7])
				c<=(a[6:0]>b[6:0])?(a-b):{{-a[7]},{b[6:0]-a[6:0]}};
			else
				c<={{a[7]},{a[6:0]+b[6:0]}};
		end
		endcase
	end
end
endmodule

全部评论
摘抄自大佬的补充: 本题目比较简单,但是还是有一些值得注意的点,中间改动一些东西可能就会出错。因为输入输出都已经直接定义了signed有符号数类型,所以直接相加、相减也没有问题,不会出现运算错误。 有符号数+有符号数=有符号数 这其中,如果加数中有无符号数,那么就会按照无符号运算。 如果表达式中有一个无符号数,则所有的操作数都会被强行转换为无符号数; 即:有符号A +无符号B时,会将补码表示的有符号A当成无符号数A1,,再计算A1+B,这样得到的结果就是错的了。
点赞 回复 分享
发布于 2023-07-31 10:32 河北

相关推荐

想踩缝纫机的小师弟练...:不理解你们这些人,要放记录就把对方公司名字放出来啊。不然怎么网暴他们
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务