C语言里,变量的左移与右移的移出位是0是1应该如何辨别?用什么方式辨别比较好?

比如我有一串变量数据,通过对它进行移位操作,比如是右移,由于数据是二进制,那么移出位可能是0也可能是1,那么每当移出一个位的时候,我应该用什么方式是辨别移出来的是0还是1呢?有没有比较好的方法推荐???

方法是先判断,后移位
比如x是char类型的
要左移,那么:判断(x & 0x80),然后再x<<1
要右移,那么:判断(x & 0x01),然后再x>>1追问

这个我还是不太明白,能说得更详细一点吗?请给个详细一点的步骤。谢谢了!!!

追答

左移就先判断原来数据的最高位,然后进行左移操作
右移就先判断原来数据的最低位,然后进行右移操作
原来数据的最高或最低位不就是进行移位的移出位

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

C语言里,变量的左移与右移的移出位是0是1应该如何辨别?用什么方式辨 ...
方法是先判断,后移位 比如x是char类型的 要左移,那么:判断(x & 0x80),然后再x<<1 要右移,那么:判断(x & 0x01),然后再x>>1

关于C语言的左移(<<)和右移(>>)
(2)算术右移,左边补最高位(即原来的最高位是0就补0,是1就补1,因为最高位代表符号,这样可以保证负数不会变成正数),右边丢掉。

C语言如何获取左移和右移后,移出的数据出的数据?
if ((x &1000 0000) == 0)移出0;else 移出1;操作 x<<1;

c语言中的右移和左移有什么区别吗?
右移一位相当于除以2。例:5>>1 5的二进制表示是101,那么右移一位之后是10就是2了,是整除的;左移的话就是在后面补一个零,相当于是乘以二,那么变成了1010,十进制是10。101右移,就是把最后一位拿掉了,是10这个是二进制的,十进是2,5\/2本来是小数,但这里是整数操作的,所以把小数...

c语言中的左调整和右调整是什么意思?
总之左移就是: 丢弃最高位,0补最低位 再说右移,明白了左移的道理,那么右移就比较好理解了.右移的概念和左移相反,就是往右边挪动若干位,运算符是>>.右移对符号位的处理和左移不同,对于有符号整数来说,比如int类型,右移会保持符号位不变,例如:int i = 0x80000000;i = i >> 1; \/\/i...

c 语言不太理解说的右移和左移的情况。能举个例子解释下那吗。就是...
左移时左端高位移出的部分舍弃是啥意思。还有右移时负整数高位补一是啥意思??解答:正数在存储的时候就是原数字,但是负数要采取补码的方式存储。这样,负数的最高位就是1。比如:对于32位的系统int为四个字节,共32位,数字1就是0xffffffff(即-1的补码,最高位是1)。对于0xffffffff 已经占满...

c语言中,按位与、按位或、左移、右移有区别么?
1、~:意思是按位取反,类似于非(!)的关系,取它的反面。2、<<: 意思是左移,移动二进制的位。3、& : 意思是按位与,类似于与(&&)的关系,一假为假。4、^:意思是按位异或,通俗地说就是相同为0,不同为1.5、|:意思是按位或,类似于或(||)的关系,一真为真。

C语言中的左移和右移?
0111右移一位是把最后一位的1去掉,左边补个0,得0011,转换为十进制是3,这是正确的。并不等同于除以2

C语言中<<和>>有什么区别?
>> 代表右移运算符:右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位或者一律补0,或者补符号位,这由不同的机器而定。在使用补码作为机器数的机器中,正数的符号位为0,负数的符号位为1。例如:var temp = 56 >> 2 变量temp的值为 14,因为56 (即...

关于C语言中的左位移和右位移,其右值能为负数吗,我在GNU编译下编译时...
估计是gcc默认负数就成了右移吧。刚才搜了一下,有符号右移貌似在标准中未定义。。所以gcc中估计就是直接把右移负数位(相当于左移)移出的数补到了右边。然后a的话*p直接左移36位就是全0。所以第8行相当于*p不变。第9行行应该和第6行一样。*p的值不变。最后直接输出*p内存中的16进制数。。

相似回答