C语言位运算,怎样修改每一位的值呢?

比如我定义如下:
unsinged char ch=0;
怎样修改ch每一位的值呢?
ch原来的值是0000 0000吧
那要修改第三位,变成0000 0100应该怎样做呢?

就三种情况,以单字节为例说明:

    将某一位置1,无论原来是0是1,操作后肯定是1,“按位或(即操作符'|')”一个该位为1,其余位为0的单字节数。如a=00001000,b=000000010,则a | b=00001010,即把第1位变成1了。注意位数从右至左是0~7。

    将某一位置0,无论原来是0是1,操作后肯定是0,“按位与(即操作符'&')”一个该位为0,其余位为1的单字节数。如a=00001010,b=11111101,则a | b=00001000,即把第1位变成0了。

    将某一位变反,即原为1时变为0,原为0时变为1,“按位异或(即操作符'^')”一个该位为1,其余位为0的单字节数。如a=00001000,b=000001000,则a | b=00000000,即把第3位变反为0了。

这里的举例以一次改变1位为例,实用中可以同时改变多位,要改变的每一位都遵从以上规则。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-20
假如你让一个数的第n位变为1则让该数与2的n-1次方 做位或运算
比如你要第三位变为1
那么就让它与4相或 就可以了
这个第几位是从右向左数的本回答被提问者采纳
第2个回答  2011-07-05
ch | = (1<<3)
1左移3位 再和ch按位或就好了拉
要置0的话 就
ch & = ~ (1<<3)
第3个回答  2011-07-05
这个就要用到位运算了
比如lz说的,就应该是ch^(1<<2)
用二进制表示的话,就是

0000 0000 0000 0001 <<2
0000 0000 0000 0100

然后

0000 0000
^ 0000 0100
----------------
0000 0100
第4个回答  2011-07-05
unsigned i=1;第n位;
ch^=(1<<n-1);

请教C语言程序里如何给地位赋值?
用位运算,先与后或 例如 a=a&0xffffff00 这样其低两字节会清零 然后 a=a|0x000000ef 这样其低两字节会置ef,要赋其他值相应改动即可 甚至 不一定是整字节的改变,可以改变任意的若干位,只要设计好与,或得值即可

C语言问题,在位运算中,操作数每右移一位,其结果相当于什么?若左移1位...
先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用<<运算符。例如:inti=1;i=i<<2;\/\/把i里的值左移2位 左移就是:丢弃最高位,0补最低位

在单片机C语言中如何对变量的某一位进行操作或赋值。
C语言提供的位运算符列表:& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1...

c语言位运算
1. 位移运算符:这两个运算符用于将二进制位向左或向右移动指定的位数。例如,`x << 2`表示将x的二进制表示向左移动两位,而`x >> 2`则表示向右移动两位。2. 位逻辑运算符:这些运算符执行位逻辑操作。`&`表示按位与,`|`表示按位或,`^`表示按位异或。这些操作在二进制层面上比较两个数...

0基础学习C语言第三章:位运算
按位异或运算符“^”用于参与运算的两个数的对应二进位相异或。当两个对应位不同时,结果位为1。例如,9^5的结果是12。异或运算常用于数据加密和校验码计算。求反运算符~对参与运算的数的各二进位按位求反。例如,~9的结果为1111111111110110。这种运算在清除或修改位值时非常有用。左移运算符“<<”...

C语言 位运算
C语言中的位运算提供了一种高效的处理二进制数据的方法。首先,我们有取反操作,0取反变成1,1取反则变成0。对于位左移(<<),比如1<<n,意味着将1向左移动n位,相当于数值乘以2的n次方。右移(>>)与左移类似,数值除以2的n次方。接着是按位与(&),当1与任意数结合时,结果保持原数,0...

c语言中,如何实现位运算?
c语言:取整型变量x中的第p位开始的n个bit位,可以采用位运算的方法。先向左移位,丢弃前面不需要的位,再通过向后移位,丢弃后面不需要的位,最后再向左移位到原来的位置,就可以了。1\/\/num&(num-1)=(1111)&(1110)=(1110)2\/\/num&(num-1)=(1110)&(1101)=(1100)3\/\/num&(num-1)=(...

C语言位运算符:与、或、异或、取反、左移和右移!
在C语言的世界里,位操作符犹如二进制运算的瑞士军刀,它们包括按位与(&)、按位或(|)、按位异或(^)、取反(~)、左移(<>),在处理二进制数据时展现出了强大的威力。<\/ 按位与(&):<\/ 这个运算符如同一个精密的清零工具,通过与操作可以清零低字节或保留特定位。例如,60与17的按位与运算...

计算机系统基础学习笔记(2)-数据的位运算操作
通过简单的C语言程序,可以清楚地观察到位运算操作的过程。在C语言中,位运算用于对数据进行精细控制,例如交换变量值。常规方法通过复制和修改变量来完成,而位操作法利用位运算符进行交换,原理基于对数据进行按位操作,从而实现变量值的交换。这种方法在数据处理和算法实现中非常有用,尤其在处理位操作密集...

c语言位运算会不会改变原变量的值
位运算不会改变原变量的值。要改变原变量的值需要经过赋值表达式实现。~取反,0取反是1,1取反是0 <<是左移,比如1<<n,表示1往左移n位,即数值大小2的n次方 >>右移,类似左移,数值大小除以2的n次方 &按位与,1与任意数等于任意数本身,0与任意数等于0,即1&x=x,0&x=0 |按位或...

相似回答