㈠ c语言中的右移运算会自动的在高位补零吗。怎么办
一般情形下是补零,但在处理有符号数的时候会因计算机系统(System)的不一样而不一样。有符号数高位是零,则右移时高位补零;假如是负数,即高位是1,那么,有得系统(System)会移入1,称算术右移,有的会移入0,称逻辑右移。
turbo
C是算术右移。
㈡ C语言中-5按位右移2位为什么是-2啊
计算机中存的是补码
(以8位为例)
-5 原码为 1 000 0101
反码为: 1 111 1010
补码为: 1 111 1011 这就是-5的补码
按位右移2位,则变成: 1 111 1110 这是-2的补码
㈢ C语言问题,在位运算中,操作数每右移一位,其结果相当于什么若左移1位,其结果相当于什么
每右移一位就是除以2,左移一位就是乘以2。C语言中,数字是二进制存储的,左移和右移就是变化为2的指数形式。
演示代码:
#include<stdio.h>
int main(){
int i = 2;
printf("i的值为%d ",i);
printf("i向右一位后的值为:%d ",i>>1);
printf("i向左一位后的值为:%d ",i<<1);
return 0;
}
程序运行结果:
扩展程序
C语言中,移位运算符组成的表达式也属于算术表达式,其值为算术值。左移运算是将一个二进制位的操作数按指定移动的位数向左移动,移出位被丢弃,右边移出的空位一律补0。
右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位一律补0,或者补符号位,这由不同的机器而定。在使用补码作为机器数的机器中,正数的符号位为0,负数的符号位为1。
㈣ c语言中右移是怎么回事,移位后左边补0吗还是补最右边的数,规则是什么啊
这要看操作的是什么数字,如果有有符号的,左边以符号位(即最高为)补齐,否则以0补齐
㈤ 关于C语言的位运算的问题
第一题:
如果书本上真是那个意思,那就是它的错误。
这个程序关键的是这几行代码:
b=a>>3; //你写的是4,估计是抄错了,应该是3,代表向右移3位。这样从右数第4位就变成了右数第一位了
c=~(~0<<4); //这个才是关键,~0表示各个位都是1,再向左移4位,此时低4位是0,其他位是1,再取反以后,c的二进制数低4位是1,其他位是0
d=b&c; //b和c按位与,因为c的低4位是1,其他位是0,1&任何数=任何数,0&任何数=0.所以取到的就是b的低4位了。 也就是a的4-7位。
如果按照书本上归纳:从右面开始取m—n位,代码如下:
b=a>>(m-1);
c=~(~0<<(n-m));
d=b&c;
第二题:
这个程序的功能其实就是将一个数的二进制位中的低n位,移动到它的高n位,相应的,原来的高16-n位也就变成了低16-n位了。这个就是它所谓的“循环移位”。
举个例子:
a的二进制数:0110 1100 0011 1010
取n为4,则
b=a<<12; //b=1010 0000 0000 0000 只保留了a的低4位
c=a>>4; //c=0000 0110 1100 0011 低4位丢失,高4位补0
c=c|b; //此时按位或,c=1010 0110 1100 0011 实现了低4变成了高4位
明白了吧?
举例说明补码和反码:
反码好理解,就是取反,比如0110的反码是1001.
补码要分类。正数的补码就是他的原码。负数的补码遵循规则"绝对值按位取反再+1"
下面举例子:
8的补码: 8的原码:0000 1000。补码仍然是0000 1000
-8的补码:因为是负数,最高位为1,需要保留。而-8的绝对值如上,合在一起就是1000 1000.先按位取反:1111 0111,再+1: 1111 1000。这个就是-8的补码了。
㈥ c语言中按位运算都是要用补码计算吗谢谢
&、|和^分别是与、或和异或运算符,都是将参加位运算的两个数按照它们的二进制位进行运算。
<<和>>是左移和右移运算符,也是先将数据转换成二进制,在进行移位。
~是取反运算符,对数据的二进制的相应位进行取反。例如:a的二进制是01101,b的二进制是10110(因为b是负数,所以要采用补码),其中的第一位表示符号。
㈦ 关于C语言的左移(<<)和右移(>>)
左移比较简单,右边补0(移几位就补几个0),左边丢掉。
右移比较复杂,右移分两种:
(1)逻辑右移,左边补0(移几位补几位),右边移出去的丢掉。
(2)算术右移,左边补最高位(即原来的最高位是0就补0,是1就补1,因为最高位代表符号,这样可以保证负数不会变成正数),右边丢掉。
㈧ c语言右移一位
想必 你是知道结果
是-1
因为 负数在 计算机 里是用补码表示的(反码 再+1)
如用八位 表示
-1 就 是 1111 1111
右移一位后还 1111 1111
㈨ c语言中位运算有那几种原理分别是什么
位与、位或、异或、取反、左移、右移等6种,位运算要求必须使用补码形式计算。
位与:对应的二进制位上只要出现1个0,则当前位使用位与后的结果为0
位或:对应的二进制位上只要出现1个1,则当前位使用位与后的结果为另一个二进制位的值
异或:对应的二进制位相同,则异或结果为0,否则异或结果为1
取反:包括符号位在内,二进制位0变1,1变0
左移:右侧补0,右移整数左侧补0,负数左侧补1
㈩ C语言中的右移运算会自动的在高位补零吗
一般情况下是补零,但在处理有符号数的时候会因计算机系统的不同而不同。有符号数高位是零,则右移时高位补零;如果是负数,即高位是1,那么,有得系统会移入1,称算术右移,有的会移入0,称逻辑右移。
turbo C是算术右移。