当前位置:首页 » 编程语言 » c语言的按位赋值
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言的按位赋值

发布时间: 2022-05-18 10:20:22

c语言“ &= |= ”是什么意思

&(按位与)双目运算,功能是参与运算的两个数各对应的二进制位相与,只有对应的两个二进制位均为1时,结果为1,否则为0; |(按位或)双目运算,功能是参与运算的两个数各对应的二进制位相或,只有对应的两个二进制位有一个为1时,结果就为1。

“|”表示按位或,按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。

(1)c语言的按位赋值扩展阅读:

C语言的运算符主要用于构成表达式,同一个符号在不同的表达式中,其作用并不一致。下面按计算的优先顺序,分别说明不同作用的表达式。需要特别指出,在C语言标准中,并没有结合性的说法。

相同优先级运算符,从左至右依次运算。注意后缀运算优先级高于前缀。因此++i++应解释为++(i++)。

而与或非的运算优先级都不一样,因此a && b || b && c解释为(a && b) || (b && c)

合理使用优先级可以极大简化表达式。

② 在C语言中11种赋值运算符的具体含义,用法

1.=
赋值运算符
变量=表达式
如:a=3;将a的值赋为3
2./=
除后赋值
变量/=表达式
如:a/=3;即a=a/3
3.*=
乘后赋值
变量*=表达式
如:a*=3;即a=a*3
4.%=
取模后赋值
变量%=表达式
如:a%=3;即a=a%3
5.+=
加后赋值
变量+=表达式
如:a+=3;即a=a+3
6.-=
减后赋值
变量-=表达式
如:a-=3;即a=a-3
7.<<=
左移后赋值
变量<<=表达式
左移就是将《左边的数的二进制各位全部左移若干位,《右边的数指定移动位数,高位丢弃,低位补0,
移几位就相当于乘以2的几次方
8.>>=
右移后赋值
变量>>=表达式
右移运算符是用来将一个数的各二进制位右移若干位,移动的位数由右操作数指定(右操作数必须是非负值),移到右端的低位被舍弃,对于无符号数,高位补0。对于有符号数,某些机器将对左边空出的部分用符号位填补(即“算术移位”),而另一些机器则对左边空出的部分用0填补(即“逻辑移位”)。注意:对无符号数,右移时左边高位移入0;对于有符号的值,如果原来符号位为0(该数为正),则左边也是移入0。如果符号位原来为1(即负数),则左边移入0还是1,要取决于所用的计算机系统。有的系统移入0,有的
系统移入1。移入0的称为“逻辑移位”,即简单移位;移入1的称为“算术移位”。
9.&=
按位与后赋值
变量&=表达式
按位与是指:参加运算的两个数据,按二进制位进行“与”运算。如果两个相应的二进制位都为1,则该位的结果值为1;否则为0。这里的1可以理解为逻辑中的true,0可以理解为逻辑中的false。按位与其实与逻辑上“与”的运算规则一致。逻辑上的“与”,要求运算数全真,结果才为真。若,A=true,B=true,则A∩B=true
10.
^=
按位异或后赋值
变量^=表达式
参与运算的两个量按照对应的位进行异或运算,且
0^0→0,
0^1→1,
1^0→1,
1^1→0
此外,一个数与0异或仍保持不变,即a^0=a
一个数与自己异或结果为0,即a^a=0
11.|=
按位或后赋值
变量|=表达式
参与运算的两个量按照对应位进行或运算,且
0|0→0,
0|1→1,
1|0→1,
1|1→1
这些位运算都是与二进制码有关的,所以多弄弄也就会了

③ 在单片机C语言中如何对变量的某一位进行操作或赋值。

在C语言中,一般有两种方法来操作位,一种是使用C语言提供的位运算操作符,一种是使用位域。

1、使用位域

在C语言中定义位域的一般格式如下:

struct位域结构名
{位域列表};

struct:在C语言中定义位域所使用的关键字是struct。

位域结构名:是一个C语言中的标识符,有字母、数字、下划线组成,而且第一个字符必须是字母或者下划线。

位域列表:组其中位域列表的形式为: 类型说明符 位域名:位域长度

下面的示例代码,通过位域来计算IEEE754浮点数编码中单精度数的最大值 、最小值和最小弱规范数。

#include<stdio.h>
typedefstructFP_SINGLE
{
unsigned__int32fraction:23;
unsigned__int32exp:8;
unsigned__int32sign:1;
}fp_single;
intmain()
{
floatx;
fp_single*fp_s=(fp_single*)&x;
fp_s->sign=0;
fp_s->exp=0xfe;
fp_s->fraction=0x7fffff;
printf("float最大数:%le ",(double)x);
fp_s->sign=0;
fp_s->exp=0x1;
fp_s->fraction=0x0;
printf("float最小数:%le ",(double)x);
fp_s->sign=0;
fp_s->exp=0;
fp_s->fraction=0x1;
printf("float最小弱规范数:%le ",(double)x);
return0;
}

2、使用位运算符

C语言中的位运算符有一个基本的常识,即只能操作整数,不能操作浮点数,因为浮点数是使用IEEE754编码的,使用位操作数没有任何意义。

C语言提供的位运算符列表:
&按位与如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
|按位或两个相应的二进制位中只要有一个为1,该位的结果值为1
^按位异或若参加运算的两个二进制位值相同则为0,否则为1
~取反~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
<<左移用来将一个数的各二进制位全部左移N位,右补0
>>右移将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0

④ C语言中“>>=,<<=,&=,^=,|=”分别表示什么意思请举例说明

1、C语言中的 >>= 意思为:右移后赋值

代码示例为:

x = 8;

x >>=3;

右移后结果为:

(4)c语言的按位赋值扩展阅读:

1、C语言运算符的优先级顺序

运算符的优先级从高到低大致是:单目运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、赋值运算符(=)和逗号运算符。

2、比特右移运算符的位移

比特右移(>>)运算符可以是算术(左端补最高有效位)或是逻辑(左端补 0)位移。例如,将 11100011 右移 3 比特,算术右移后成为 11111100,逻辑右移则为 00011100。因算术比特右移较适于处理带负号整数,所以几乎所有的编译器都是算术比特右移。

⑤ 关于C语言位运算,赋值的问题,回答详细一点。为什么按位取反后输出的结果不一样

  1. 2的二进制是00000010,取反得到11111101,最高位为1,说明这是个负数的补码。负数的补码,是由其绝对值的原码取反加1得到,反过来,将负数的补码减1取反,就得到其绝对值的原码。11111101-1=11111100,再取反得到00000011,即十进制的3。也就是说该负数的绝对值为3,那么这个负数为-3。

  2. 所以第一个值是-3

  3. 整型的每一种都分有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。

  4. 你声明变量无符号,将二进制转换无符号在转换十进制,导致最高位由原来的符号位变成了有效数字位了,参与转换

  5. 所以最后结果是253

  6. 你去掉前面的unsigned 两个值应该是一样的


⑥ C语言 怎么用 1条语句 进行位赋值

取 b的第5位: (b & 0x10)
清 a 的第5位: (a & 0xef)
赋值到a的第5位: a = (a & 0xef) | (b & 0x10);

⑦ 在C语言中11种赋值运算符的具体含义,用法

1.六个变量=表达式的赋值:

=是赋值运算符,/=是除后赋值,*=是乘后赋值,

%=是取模后赋值,+=是加后赋值,-= 是减后赋值,

2.<<=是左移后赋值,变量<<=表达式 左移就是将左边的数的二进制各位全部左移若干位,右边的数指定移动位数,高位丢弃,低位补0, 移几位就相当于乘以2的几次方。

3.>>=是右移后,变量>>=表达式,右移运算符是用来将一个数的各二进制位右移若干位,移动的位数由右操作数指定(右操作数必须是非负值),移到右端的低位被舍弃,对于无符号数,高位补0。

对于有符号数,某些机器将对左边空出的部分用符号位填补(即“算术移位”),而另一些机器则对左边空出的部分用0填补(即“逻辑移位”);

对无符号数,右移时左边高位移入0;对于有符号的值,如果原来符号位为0(该数为正),则左边也是移入0。

如果符号位原来为1(即负数),则左边移入0还是1,要取决于所用的计算机系统,系统移入0或系统移入1。

移入0的称为“逻辑移位”,即简单移位;移入1的称为“算术移位”。

4.&= 按位与后,变量&=表达式,按位与是指:参加运算的两个数据,按二进制位进行“与”运算。

如果两个相应的二进制位都为1,则该位的结果值为1;否则为0。

5.^= 按位异或后赋值,变量^=表达式,参与运算的两个量按照对应的位进行异或运算,且
0^0→0, 0^1→1, 1^0→1, 1^1→0

一个数与0异或仍保持不变,如a^0=a
一个数与自己异或结果为0,如a^a=0

11.|=是按位或后赋值,变量|=表达式,参与运算的两个量按照对应位进行或运算,且0|0→0, 0|1→1, 1|0→1, 1|1→1。

(7)c语言的按位赋值扩展阅读:

1.赋值表达式的功能是计算表达式的值再赋予左边的变量。

赋值运算符具有右结合性,因此a=b=c=5可理解为a=(b=(c=5))。

2.在其它高级语言中赋值构成了一个语句,称为赋值语句;

而在C语言中,

把“=”定义为运算符,从而组成赋值表达式。

3.凡是表达式可以出现的地方均可出现赋值表达式。

例如:式子x=(a=5)+(b=8)是合法的。它的意义是把5赋予a,8赋予b,再把a,b相加,和赋予x,故x应等于13。

4.在C语言中也可以组成赋值语句。

按照C语言规定,任何表达式在其未尾加上分号就构成为语句。

⑧ c语言中复合位运算赋值(&=,|=,^=,>>=,<<=)表示什么意思

&=,按位与后赋值,变量&=表达式;
|=,按位或后赋值,变量|=表达式;
^=,按位异或后赋值,变量^=表达式;
>>=,右移后赋值,变量>>=表达式;
<<=,左移后赋值,变量<<=表达式;
类似的还有,
/=,除后赋值,变量/=表达式;
*=,乘后赋值,变量*=表达式;
%=,取模后赋值,变量%=表达式;
+=,加后赋值变量,+=表达式;
-=,减后赋值变量,-=表达式;
这些是C/C++独有的复合赋值运算符,结合方向,从右向左。是一种缩写形式,使得对变量的改变更为简洁,更有效率。

⑨ C语言中赋值运算符&=的含义

  • a+=b 等同于 a = a+b

  • a-=b 等同于 a = a-b

  • a*=b 等同于 a = a*b

  • a/=b 等同于 a = a/b

  • a%=b 等同于 a = a%b

  • a&=b 等同于 a = a&b &表示按位与

  • a>>=b 等同于 a = a>>b >>表示右移

  • a<<=b 等同于 a = a<<b <<表示左移

  • a|=b 等同于 a = a|b |表示按位或

  • a^=b 等同于 a = a^b ^表示按位异或

  • 基本的赋值运算符是“=”。他的优先级别低于其他的运算符,所以对该运算符往往最后读取。

  • 一开始可能会以为它是“等于”,其实不是的。它的作用是将一个表达式的值赋给一个左值。一个表达式或者是一个左值,或者是一个右值。

  • 所谓左值是指一个能用于赋值运算左边的表达式。左值必须能够被修改,不能是常量。我们现在是用变量作左值,以后还可以看到,指针和引用也可以作左值。

  • 复合的赋值运算符,又称为带有运算的赋值运算符,也叫赋值缩写。

  • 例如:i=i+j;可表示为 i+=j;这里+=是复合赋值运算符。

  • 同样的共有10种这样的运算符,它们是:

  • += 加赋值;

  • -= 减赋值;

  • *= 乘赋值;

  • /= 除赋值;

  • %= 求余赋值;

  • &= 按位与赋值;

  • | = 按位或赋值;

  • ^= 按位异或赋值;

  • <<= 左移位赋值;

  • >>= 右移位赋值。

⑩ 51单片机c语言编程能给位赋值么

keil的话可以。打开你的reg51(或reg52等)头文件,你就会看到已经声明的位变量,
格式是:sbit 位变量名=SFR名^位地址值 (P3也是头文件中最开始部分声明的)
头文件中有
sbit WR=P3^6;
所以你直接写 WR=1就行了