我是靠谱客的博主 傲娇大门,这篇文章主要介绍char 与 unsigned char的本质区别,现在分享给大家,希望可以做个参考。

在内存中,char与unsigned char没有什么不同,都是一个字节,唯一的区别是,char的最高位为符号位,因此char能表示-128~127, unsigned char没有符号位,因此能表示0~255,8个bit,最多256种情况,因此无论如何都能表示256个数字。

主要是符号位,但是在普通的赋值,读写文件和网络字节流都没什么区别,反正就是一个字节,不管最高位是什么,最终的读取结果都一样,只是你怎么理解最高位而已,在屏幕上面的显示可能不一样。

但是我们却发现在表示byte时,都用unsigned char,这是为什么呢?
byte没有什么符号位之说,更重要的是如果将byte的值赋给int,long等数据类型时,系统会做一些额外的工作。
如果是char,那么系统认为最高位是符号位,而int可能是16或者32位,那么会对最高位进行扩展(注意,赋给unsigned int也会扩展)

而如果是unsigned char,那么不会扩展

这就是二者的最大区别。

#include <stdio.h>
#include <thread>
#define INC_TO 1000000 // one million...
#include <mutex>
#include <functional>
#include <atomic>
#include <vector>
#include <sstream>
#include <iostream>

void test_unsigned_char(const unsigned char uc) {
  char c = uc;
  printf("%c %cn", c, uc);
  // char最高位符号位填充
  printf("%X %Xn", c, uc);
  unsigned int a = c, b=uc;
  printf("%d %dn", a, b);

  int d=a, e=uc;
  printf("%d %dn", d, e);
  printf("%X %Xn", d, e);
}

int main()
{
  test_unsigned_char(129);
  printf("最高位不是1:n");
  test_unsigned_char(0x7F);

  int c = 0x7FFFFFFF;
  printf("%dn", c);

  int e = 0x8FFFFF0;
  unsigned int k = e;
  printf("k:%d %X", k, e);
  return 0;
}

输出:

� �
FFFFFF81 81
-127 129
-127 129
FFFFFF81 81
最高位不是1:
 
7F 7F
127 127
127 127
7F 7F
2147483647
k:150994928 8FFFFF0

最后

以上就是傲娇大门最近收集整理的关于char 与 unsigned char的本质区别的全部内容,更多相关char内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(126)

评论列表共有 0 条评论

立即
投稿
返回
顶部