char和unsigned char

         网络编程中一般都用unsigned char,而不用char,是因为把char强制转换成int或long时,系统会进行类型扩展。

#include <stdio.h>


int main()
{
   int a = 0xde;  //1101 1110
   char b = a;
   unsigned char u_b = a;
   
   printf("b=%x\n",b);
   printf("u_b=%x\n",u_b);


   char d = 0xde;
   unsigned char c = 0xde;

   int i_d = d;
   int ui_d = c;
 
   printf("i_d=%x\n",i_d);
   printf("ui_d=%x\n",ui_d);
      

   return 0;
}

运行:b=ffffffde
          u_b=de
          i_d=ffffffde     [扩展之后]
          ui_d=de

字节0xde最高位是1,如果是char类型,在转换成int时,高位全部会扩展成为1;而unsigned char则会全部扩展成0。

#include <stdio.h>


int main()
{
   int a = 0x2b;  //1101 1110
   char b = a;
   unsigned char u_b = a;
   
   printf("b=%x\n",b);
   printf("u_b=%x\n",u_b);


   char d = 0x2b;
   unsigned char c = 0x2b;

   int i_d = d;
   int ui_d = c;
 
   printf("i_d=%x\n",i_d);
   printf("ui_d=%x\n",ui_d);
      

   return 0;
}

当字节为0x2b时,因为其二进制最高位是0,所以unsigned char和char的高位都扩展成0,结果一样。 

 

 

参考地址:https://www.cnblogs.com/etangyushan/p/6871701.html?utm_source=itdadao&utm_medium=referral

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盼盼编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值