C语言中二进制指定的某一位数0变1,或者1变0,并输出该数值.给个详细的代码吧!谢谢!!!

如题所述

0变1其它位不变,位或一个该位为1其它位为0的数可得
1变0其它位不变,位与一个该位为0其它位为1的数可得
得到等N位为1其它位为0的数,可用1左移N位即得
得到等N位为0其它位为1的数,用前数位反一下即得

演示程序:
#include<stdio.h>
char*int2bin(int ,char* );
int main()
{
int x0,x1,n,flag;
char x0b[33]={0};
char x1b[33]={0};
while(1)
{
x0 = x1 = n = flag = -1;
printf("输入原始数值 操作位(0-31) 和操作方式(1置/0清)\n");
scanf("%d %d %d", &x0, &n, &flag);
if( n<0 || n>31 || flag!=0&&flag!=1 ) break;//无效输入将退出
if(flag==1)//置1
{
x1 = x0 | (1<<n); //n位置1
}
else//清0
{
x1 = x0 & ~(1<<n); //n位清0
}
printf("处理前十进制:%-10d 二进制:%s\n", x0,int2bin(x0,x0b));
printf("处理后十进制:%-10d 二进制:%s\n\n",x1,int2bin(x1,x1b));
fflush(stdin);
}
return 0;
}
char*int2bin(int x,char*out)
{
for(int i=0;i<32;i++)
out[i] = (x&(1<<(31-i))) ? '1' : '0';
out[32] = '\0';
return out;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-11
int fun(int a,int x)
{
int c;
c=a|(1《x);
return c;
}
这里a是要操作的数,x是指定位(从右向左)
第2个回答  2013-04-11
#define set_bit(val,bit) \
do{\
val |= 1<<bit;\
}while(0)
#define clr_bit(val,bit)\
do{\
val &= ~(1<<bit);\
}while(0)

本回答被网友采纳
第3个回答  2013-04-11
最后一位1变0,0变1,
例如:32位下
int a;
printf("请输入a的值");
scanf("%d",&a);
a=a^1;
printf("%d",a);本回答被网友采纳

C语言中二进制指定的某一位数0变1,或者1变0,并输出该数值.给个详细的代...
1变0其它位不变,位与一个该位为0其它位为1的数可得 得到等N位为1其它位为0的数,可用1左移N位即得 得到等N位为0其它位为1的数,用前数位反一下即得 演示程序:include<stdio.h> char*int2bin(int ,char* );int main(){ int x0,x1,n,flag;char x0b[33]={0};char x1b[33]=...

C语言问题,关于按位取反问题,大家看一下,这个~操作符。
人工进行整数的位运算之前,首先要确定整数的位长,如TurboC里面的int(16位),转成二进制:27 = 0000 0000 0001 1011 B,要用0在左面补齐16位,然后进行1变0、0变1的取反:1111 1111 1110 0100B,这样的结果再转换回10进制的时候,就涉及到了另一个问题,负数。二进制整数用左数第一位区分...

...将输入的数字字符转换成数字并输出并输出!谢谢
void main(){ char c;scanf("%c",&c);\/\/输入一个数字字符 if(c>='0' && c<='9'){ \/\/若为0-9则进行处理 c-='0'; \/\/将数字字符转换为真正的数字值 printf("%d",c);\/\/输出数字值 这里用%d } else{ printf("please enter 0~9!\\n");} } ...

【急求】c语言程序输入一个整数(int),要求输出其二进制形式的值。
我也发一个自编的,已验证通过。#include <stdio.h>main(){ char binOut[17]; short int i, j; \/* 16bit的整数,要用short int型 *\/ scanf("%d", &i); for(j=15;j>=0;j--) { if(i&(1<<j)) binOut[15-j] = '1'; else binOut[15-j] = '0'; } binOut[16] = 0; printf("DEC...

怎用C语言求一个数的二进制
用栈实现,用520除2把所得余数进栈,把商作为新的数除2,再把余数进栈,取商为新的数,如此往复直到商为1为止,然后把栈中的数依次输出后的1、0组合即为所求数的二进制数。具体的代码不便粘贴,有兴趣欢迎交流

用C语言编写程序,输入一个字符,输出它的字符值和ASCII值
1、计算机中的所有数据都是以二进制存储的,因此字符也是以二进制存储且占用一个字节,在c语言中可以把char型当作只有一个字节的有符号整数,8位有符号,最大正值就是127了。2、例如:可以这样使用循环的 include <stdio.h> include <stdlib.h> int main(){ char c;int i;printf("please input ...

下图是书《单片机与c语言》中的,图中的=~是什么意思,最好帮我解释一...
~是取反的意思,那条语句的意思就是:把变量L2按位取反,原来的位为0,再变为1赋值给L2。反之相反咯。在这个程序里面的意思,就是P1^7口交替赋值为0或者1;估计控制LED灯闪烁类的吧

C语言中移位运算
例: 00111001∧ 0010101000010011c语言源代码:#include <stdio.h>main(){int a=071;int b = 052;printf("%d",a^b);} 应用:(1)使特定位翻转设有数01111010(2),想使其低4位翻转,即1变0,0变1.可以将其与00001111(2)进行“异或”运算。即:01111010^0000111101110101 运算结果的低...

c语言 代码如下,为什么输出是29,求解释,越详细越好
值为i=1时使用后的值即为5,执行后返回6+5,此处a的值++变为6,以便下次使用,返回到第18)行,s加返回值后为18+11=29 循环结束,最后输出的值为29 这样解释够清楚了吧,问题的关键在于搞清楚变量的作用域(尤其是全局变量和局部变量同名时),还有搞清楚静态变量和非静态变量的生存期,就可以...

C语言中二进制求补码过程中取反后再加1,那个1是怎么加的?跪求!
八位二进制数:0000 0000 ~ 1111 1111。也就是十进制:0 ~ 255。如果出现进位:2^8 = 256。此时,+255 (1111 1111)、再舍弃进位,也就是-1 了。同理,254 (1111 1110),也就是-2。。。以上这些正数,就“计算机专家发明的补码”了。你说可笑不?--- 补码的来源:就是【舍弃进位】...

相似回答