我有两个字符
char c1='A', c2 = 'B';
因为A
的8位二进制为01000001
,而B
的二进制为01000010
。我希望将B
的最左位置于A
的右侧最后一位,以便c1变为01000000
。我这样做是通过计算二进制文件A和B,然后创建新的二进制文件,然后执行所描述的过程,然后将新的二进制文件分配给c1
。
我的问题是,是否有任何有效的方法可以做到这一点?
答案 0 :(得分:3)
c2
的最左边位是:
c2 & 0x80
要将其移动到最右边的位,请使用右移:
(c2 & 0x80) >> 7
要将其与c1
结合使用,首先必须清除最c1
位:
(c1 & 0xfe)
然后将它们与|
:
c1 = (c1 & 0xfe) | ((c2 & 0x80) >> 7);
您还应将声明更改为unsigned char
以避免符号位出现问题。使用按位运算时,通常最好只使用unsigned
个变量。
答案 1 :(得分:-1)
你想要这个:
c1 = (c1 & 0xfe) | (c2 >> 7);