1楼:
解析得对啊!把x右移16位,那么x的“高16位”就移到“低16位”上了。这时若x不为0,则!
x就是0,!!x就是1。所以s=!!
(x>>16);后若x的“高16位”中有1则结果为1,否则为0,这就判断了x的最高位是否在高16位上了。不过这题说的“最高位”显然是指1,难道0就不能做最高位?0和正整数的最高位不都是0吗?
不知出题人的意图是啥——当然这是题外话。
2楼:匿名用户
【第九卷:五言乐府】
c语言中c=a>>3是什么意思,>>好像是位运算符,请问有什么作用
3楼:四舍**入
>> 右移就是把这个数的末尾多少位去掉,如17>>3 表示 0001 0001 的最后3位去掉,就变成了 0000 0010
左移运算 左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。
例如: a<<4 指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。
6. 右移运算 右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。
4楼:匿名用户
就是把a转化成2进制后向右移动3位。。比如a=9,二进制的话就是1001向右移动3位变成0001,就是1了
5楼:隽风
a>>3表示将a向右移三位,比如a=11110000,则a>>3=00011110
6楼:羿禄衣睿姿
有,但不太常用。其运算是二进制按位异或,比如a=9(二进制1001),b=12(二进制1100),那么a^b的结果是5(二进制0101)
一般电脑文本上常用^表示某数的几次方,c语音里没有表示“几次方”的运算符
7楼:五哥放羊
位右移,针对二进制操作,运算过程是:先把3转成二进制=1111右移一位=01=1,因为第1个1移到个位了,第2个1移到外边被吃掉了。
11右移二位=00=0
11右移三位=00=0
因为a右移了3位,所以结果当然是0
c语言中的位运算有什么优点?
8楼:匿名用户
位运算主要是直接操控二进制时使用 ,主要目的是节约内存,使你的程序速度更快,还有就是对内存要求苛刻的地方使用,以下是一牛人总结的方法,分享一下:位运算应用口诀
清零取反要用与,某位置一可用或
若要取反和交换,轻轻松松用异或
移位运算
要点 1 它们都是双目运算符,两个运算分量都是整形,结果也是整形。
2 " < < " 左移:右边空出的位上补0,左边的位将从字头挤掉,其值相当于乘2。
3 " > > " 右移:右边的位被挤掉。对于左边移出的空位,如果是正数则空位补0,若为负数,可能补0或补1,这取决于所用的计算机系统。
4 " > > > " 运算符,右边的位被挤掉,对于左边移出的空位一概补上0。
位运算符的应用 (源操作数s 掩码mask)
(1) 按位与-- &
1 清零特定位 (mask中特定位置0,其它位为1,s=s& mask)
2 取某数中指定位 (mask中特定位置1,其它位为0,s=s& mask)
(2) 按位或-- |
常用来将源操作数某些位置1,其它位不变。 (mask中特定位置1,其它位为0 s=s|mask)
(3) 位异或-- ^
1 使特定位的值取反 (mask中特定位置1,其它位为0 s=s^mask)
2 不引入第三变量,交换两个变量的值 (设 a=a1,b=b1)
目 标 操 作 操作后状态
a=a1^b1 a=a^b a=a1^b1,b=b1
b=a1^b1^b1 b=a^b a=a1^b1,b=a1
a=b1^a1^a1 a=a^b a=b1,b=a1
二进制补码运算公式:
-x = ~x + 1 = ~(x-1)
~x = -x-1
-(~x) = x+1
~(-x) = x-1
x+y = x - ~y - 1 = (x|y)+(x& y)
x-y = x + ~y + 1 = (x|~y)-(~x& y)
x^y = (x|y)-(x& y)
x|y = (x& ~y)+y
x& y = (~x|y)-~x
x==y: ~(x-y|y-x)
x!=y: x-y|y-x
x< y: (x-y)^((x^y)& ((x-y)^x))
x< =y: (x|~y)& ((x^y)|~(y-x))
x< y: (~x& y)|((~x|y)& (x-y))//无符号x,y比较
x< =y: (~x|y)& ((x^y)|~(y-x))//无符号x,y比较
应用举例
(1) 判断int型变量a是奇数还是偶数
a& 1 = 0 偶数
a& 1 = 1 奇数
(2) 取int型变量a的第k位 (k=0,1,2……sizeof(int)),即a> > k& 1
(3) 将int型变量a的第k位清0,即a=a& ~(1< < k)
(4) 将int型变量a的第k位置1, 即a=a|(1< < k)
(5) int型变量循环左移k次,即a=a< < k|a> > 16-k (设sizeof(int)=16)
(6) int型变量a循环右移k次,即a=a> > k|a< < 16-k (设sizeof(int)=16)
(7)整数的平均值
对于两个整数x,y,如果用 (x+y)/2 求平均值,会产生溢出,因为 x+y 可能会大于int_max,但是我们知道它们的平均值是肯定不会溢出的,我们用如下算法:
int average(int x, int y) //返回x,y 的平均值
(8)判断一个整数是不是2的幂,对于一个数 x > = 0,判断他是不是2的幂
boolean power2(int x)
(9)不用temp交换两个整数
void swap(int x , int y)
(10)计算绝对值
int abs( int x )
(11)取模运算转化成位运算 (在不产生溢出的情况下)
a % (2^n) 等价于 a & (2^n - 1)
(12)乘法运算转化成位运算 (在不产生溢出的情况下)
a * (2^n) 等价于 a< < n
(13)除法运算转化成位运算 (在不产生溢出的情况下)
a / (2^n) 等价于 a> > n
例: 12/8 == 12> > 3
(14) a % 2 等价于 a & 1
(15) if (x == a) x= b;
else x= a;
等价于 x= a ^ b ^ x;
(16) x 的 相反数 表示为 (~x+1)
9楼:匿名用户
很多高级的动态规划题目或者一些基础的运算往往需要较高的执行效率和较低的空间需求,或者需要表示一些状态集合,而位运算刚好能满足这一切。很多的时候,恰当的位运算使用也能使程序变得更加简洁和优美。
c语言中,!(--x)什么意思? 30
10楼:浮生栀
c语言运算符,括号里面(---x)表示x的值减去1,相当于“x”变为“x-1”,括号外面“!”表示取反(非0数变为0,0变为1)。
除了常见的三大类,算术运算符、关系运算符与逻辑运算符之外,还有一些用于完成特殊任务的运算符,比如位运算符。
扩展资料
优先级,c语言中,运算符的运算优先级共分为15 级。1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。
而在一个运算量两侧的运算符 优先级相同时,则按运算符的结合性所规定的结合方向处理。
结合性:c语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。
如有表达式x-y+z 则y 应先与“-”号结合,执行x-y 运算,然后再执行+z 的运算。这种自左至右的结合 方向就称为“左结合性”。
而自右至左的结合方向称为“右结合性”。最典型的右结合 性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z 再执行x=(y=z)运算。
c语言运算符中有不少为右结合性,应注意区别,以避免理解错误。
优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。所有的优先级中,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。其它的都是从左至右结合。
具有最高优先级的其实并不算是真正的运算符,它们算是一类特殊的操作。()是与函数相关,与数组相关,而->及.是取结构成员。
其次是单目运算符,所有的单目运算符具有相同的优先级,因此在我认为的 真正的运算符中它们具有最高的优先级,又由于它们都是从右至左结合的,因此*p++与*(p++)等效是毫无疑问的。
另外在c语言里,没有前置后置之分,因为++ -- 是右结合所以右侧优先运算,表现为 "操作数后置优先级比较高" 的假象,前置和后置的区分是因为运算符重载而后加入c++的
接下来是算术运算符,*、/、%的优先级当然比+、-高了。
11楼:该用户未注册
在c语言
中,~x代表的意思是按位取反的意思。
将x按位取反
比如x = 10101010b。
那么~x = 01010101b。
还要注意,在c语言中,还有逻辑取反符号“!”,“!x”的返回值只有0和1两种。如果x为0,则!x=1。如果x不等于0.则!x的返回值为0。
扩展资料:c语言关键字。
signed 声明有符号类型变量
unsigned 声明无符号类型变量
struct 声明结构体变量
union 声明联合类型
enum 声明枚举类型
switch 用于开关语句
case 开关语句分支
default 开关语句中的“其他”分支auto 声明自动变量,缺省时编译器默认为此const 声明只读变量
static 声明静态变量
register 声明寄存器变量
c语言移位运算符,C语言移位运算符怎么用?
1楼 匿名用户 右移对符号位的处理和左移不同 对于有符号整数来说 比如int类型 右移会保持符号位不变 例如 10100110 5 假设字长为8位 ,则得到的是 11111101。 总之 在c中 左移是逻辑 算术左移 两者完全相同 右移是算术右移 会保持符号位不变 实际应用中可以根据情况用左 右移做...
C语言中移位运算的详细解释,c语言中移位运算
1楼 碳酸饮料拜拜哈 1 按位与 运算符 按位与是指 参加运算的两个数据,按二进制位进行 与 运算。如果两个相应的二进制位都为1,则该位的结果值为1 否则为0。 这里的1可以理解为逻辑中的true 0可以理解为逻辑中的false。按位与其实与逻辑上 与 的运算规则一致。逻辑上的 与 ,要求运算数全真...
SX是什么意思啊,网络语言 sx 是什么意思??
1楼 天堂念丶炣决 是 的意思吗 读起来满像的 2楼 甄璇频浩波 开g 一般被检测出来就会sx错误 提醒有非法程序 3楼 玉安司马曼珍 应该是非法吧 dnf里经常见。。。 4楼 马蕾鹿妙 非法程序 最好先把密码该一下 再重启就ok了 网络语言 sx 是什么意思?? 5楼 匿名用户 正确读法 傻 叉 ...