char ,unsigned char 还有位移 >> <<

>> << 对于有符号的用算术运算, 无符号的用逻辑运算。

<< 左移算数逻辑都一样 高位全去掉(符号位也不保留),低位补0.

>>右移有点不同,算术的话高位会补符号位,10000001 >> 2   =11100001

                                 逻辑的话 10000001 >> 2   =01100001

另外 1<<5-1 是1 << (5-1), 逻辑位移优先级低于加减乘除。


char , unsigned char 只有转为int ,unsigned int 这些需要补位的时候才有区别~

#include <stdio.h>
int main(){
	int a,b;
	unsigned n,m;
	unsigned char uc;
	char c;
	uc = 0x7F;
	c = 0x7F;
	a =c;
	b =uc;
	n =c;
	m = uc;
	printf("%x,%x\n",a,b);
	printf("%x,%x\n",n,m);
	return 0;
}
输出是4个7f ,,大家都一样

#include <stdio.h>
int main(){
	int a,b;
	unsigned n,m;
	unsigned char uc;
	char c;
	uc = 0xFF;
	c = 0xFF;
	a =c;
	b =uc;
	n =c;
	m = uc;
	printf("%x,%x\n",a,b);
	printf("%x,%x\n",n,m);
	return 0;
}
输出:

ffffffff,ff

ffffffff,ff

所以说char 补位的时候高位都会填充符号位的值, 即使转化成unsigned的时候也是如此。

而unsigned char 一律补0


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值