c语言 菜鸟问题 操作数的位运算不改变原操作数的值

什么叫“操作数的位运算不改变原操作数的值” 能举个例子说明吗。。。。

就像有赋值语句 a=2;
然后左移两位 a<<2;
a还是2
并没有变成 8追问

比如a=19,b=23。。。b^=a^=b运算之后,a,b各是多少啊

追答

这个更简单了。因为那是赋值语句

追问

上面的a,b是多少啊。。。。又比如b=!a;c=d+2;是不是算运算符"!"和"+"没有改变a和c的原值呢

追答

哎。a^=b 这是一个复合赋值运算表达式
这个相当于 a=a^b
那么,在执行a^b的时候,a和b的值是没有变的
执行之后,就是赋值,把a^b的值,存进a这个变量
接着是b^=a
就是 b=b^a
b^a的时候,b是没有变,a就是a^b的值
算出b^a的值,存进b里面
! 和+ 是没有改变原来的变量的,相当于是原来的变量拷贝了一份值一样

温馨提示:内容为网友见解,仅供参考
无其他回答

《C语言要点》第七章 位操作——位运算和位域
C语言中,只能对整型或字符型数据进行位运算,无法对其他类型的数据进行此类操作。位运算符包括但不限于按位求反、左移、右移、按位与、按位异或和按位或。例如,按位求反符 `~` 可以反转操作数的每一位;左移操作符 `` 同样移动每一位,但向右;按位与 `&` 进行位与运算;异或 `^` 进行...

C语言中…B=A<<2位,那么原来的数据A改变了吗?
A没有改变,位运算本身不产生副作用,不会改变被操作数的值

小弟初学c语言。求大神告知位运算和逻辑运算区别
位运算是两个操作数在二进制层次的运算,其运算规则是必须两个数占用的位数相同,若不相同会转换为相同的,其中对应位进行运算,如第一位与第一位进行位运算,第二位与第二位进行位运算...逻辑运算是两个表达式之间的运算,两个表达式的取值只能为真或者假 ...

C语言菜鸟问题
位段操作,2008年6月刊《程序员》上还有人讨论过C++实现位操作的一种方案,还批评了这种宏的不便,就是说传统方式有点BT,并且一次只能取一位。你用&来运算,不就能取出某一位了吗?0xXXX在这里只是一个字节内范围的位运算常量,还够不上地址。

C语言问题,在位运算中,操作数每右移一位,其结果相当于什么?若左移1位...
1、右移,除以2右移n位除以2的n次方;右移的概念和左移相反,就是往右边挪动若干位,运算符是>>;右移对符号位的处理和左移不同,对于有符号整数来说,比如int类型,右移会保持符号位不变,例如:inti=0x80000000;i=i>>1;\/\/i的值不会变成0x40000000,而会变成0xc0000000 2、左移,乘以2...

C++|运算符优先级的合理性理解
位移运算符与插入、提取流运算符(如<<、>>)的优先级属于算术运算范畴,主要用于进行位操作。流提取流运算符是对位移运算符的重载,重载操作不能改变其原有优先级。单目运算符通常具有较高的优先级,这是因为它们执行的操作往往对表达式的其余部分产生显著影响。关系运算符的优先级通常高于算术运算运算符...

关于C语言的基础问题。(位运算、补码)
补码表示有符号数时,第一位表示正负号,1为-,0为+,所以i是0xFFFFFF,全部为1,则i为负数,当其为负数时,值的求法是去掉符号位,剩下的取反+1,那么就是0+1=1,所以i的值是-1 要理解为什么不同应该先去看一下补码的编码规则,而不是看二进制的运算 进制之间的转换可以看看http:\/\/hi....

c语言位运算问题?
c语言位运算问题解答:要解答这个问题我们先来看一个例子,代码如下图一,图中右边是问题中得到代码,左边是这段代码的汇编指令。两种情况的不同点详细说明如下:第一种情况:printf("%d",2>>64);由图中的汇编代码可以看出,如果两个数都是常数的情况下,代码中是不含对应的汇编指令的,因为编译器...

c语言位运算符的用法
c语言位运算符的用法如下: 一、位运算符C语言提供了六种位运算符: & 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移 >> 右移 1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补...

计算机系统基础学习笔记(2)-数据的位运算操作
逻辑移位和算术移位操作符相同,编译器根据操作数选择不同的指令。无符号数使用逻辑移位,有符号数使用算术移位。算术右移补符号位,逻辑右移补零。通过简单的C语言程序,可以清楚地观察到位运算操作的过程。在C语言中,位运算用于对数据进行精细控制,例如交换变量值。常规方法通过复制和修改变量来完成,而...

相似回答