Terms of the deal were not released but the NFL Network reported McCarron will make at least $10 million with the possibility of making $6.5 million in incentives.
The Bills traded Taylor to the Browns last week and the only quarterback on the roster was Nathan Peterman, who threw five interceptions in a 54-24 loss to the Los Angeles Chargers in Week 11.
McCarron became an unrestricted free agent after winning a grievance against the Cincinnati Bengals last month. McCarron's grievance centered around whether the Bengals had a proper medical basis for putting him on the non-football injury to start the 2014 season.
The Bengals drafted McCarron in the fifth round of the 2014 draft out of Alabama. Cincinnati officials believed McCarron suffered a right shoulder injury while away from the team, and they placed him on the non-football injury list on July 21, 2014, keeping him out of training camp. On Aug. 30, he was placed on reserve/non-football injury, which meant he would miss at least the first six games of the season.
McCarron argued that was an improper designation because he had passed his post-draft physical and had kept the Bengals informed of his medical situation. Included in testimony were medical records along with media reports and photos.
McCarron appeared in 11 games for the Bengals as the backup to Andy Dalton, though he did start the final three games of the 2015 season and helped Cincinnati reach the playoffs when Dalton broke his thumb.
McCarron completed 66.4 percent of his passes in seven appearances during the 2015 regular season and threw six touchdown passes. In his lone playoff start, he completed 23 of 41 passes for 212 yards, one touchdown and one interception in a loss to the Pittsburgh Steelers.
The Bengals nearly traded McCarron to Cleveland last season but the deal fell through because the Browns failed to submit the paperwork on time.