У меня есть программа C ниже, которая заменит указанный бит числа из другого числа. Пример:
Let first no whose bit is to be replaced is:
7 //0000 0111
Second no from whom bit is to be replaced
8 //0000 1000
Specified position: 3 (0-indxed)
Converted number will be 15
C Код:
#include <stdio.h>
int main()
{
int first,second,pos;
printf("enter first & second no:\n");
scanf("%d %d",&first,&second);
printf("enter specified position(0-indexed)\n");
scanf("%d",&pos);
//collect corresponding bit of second no
int temp=(second>>pos)&1;
//if bit at specified position is 1
if(temp==1){
temp=temp<<pos;
first|=temp;
}
else{ //if bit at specified position is 0
int flag=255;//FF, all bit set to 1(considering 8 bit numbers)
temp=1<<pos;
//this set only the specified position bit 0 others 1
flag=flag^temp;
first&=flag;
}
printf("converted no %d\n",first);
return 0;
}
К счастью, все это отлично работает для 8-битных целых чисел. Моя проблема в том, что мне нужна программа для работы с 32-битными целыми числами (положительные целые числа меньше 3 миллиардов) Всякий раз, когда я использую большие числа, такие как 2 миллиарда, он не выводит правильное преобразованное число. Как я могу исправить эту проблему?