在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) 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,那么不会扩展。

这就是二者的最大区别。

同理可以推导到其它的类型,比如short, unsigned short。等等

具体可以通过下面的小例子看看其区别

include

void f(unsigned char v)

{

char c = v;

unsigned char uc = v;

unsigned int a = c, b = uc;

int i = c, j = uc;

printf("----------------\n");

printf("%%c: %c, %c\n", c, uc);

printf("%%X: %X, %X\n", c, uc);

printf("%%u: %u, %u\n", a, b);

printf("%%d: %d, %d\n", i, j);

}

int main(int argc, char *argv[])

{

f(0x80);

f(0x7F);

return 0;

}

输出结果:

----------------

%c: ?, ?

%X: FFFFFF80, 80

%u: 4294967168, 128

%d: -128, 128

----------------

%c: ,

%X: 7F, 7F

%u: 127, 127

%d: 127, 127

由此可见,最高位若为0时,二者没有区别,若为0时,则有区别了。

c# char unsigned_char和unsigned char--数据类型区别相关推荐

  1. 报错笔记:cannot convert parameter 1 from 'char [1024]' to 'unsigned char *'

    第一段:数组的类型是char,因此函数在引用const char 型的指针的时候,必须用char类型数组的首地址.如果是byte类型的指针的首地址,则会报cannot convert paramete ...

  2. c# char unsigned_关于C ++:将unsigned char *复制到unsigned char *

    我需要将数据包状态保存一段时间. 因此,我读取了表示为unsigned char *的数据包数据,然后我用该数据创建了一条记录并将该记录保存在列表中一段时间. 这将是将记录中的数据包表示为char * ...

  3. (unsigned char *)a与*(unsigned char *)a的含义

    一.(unsigned char *)&a运算顺序 1.先取a的地址 2.将&a强制类型转化为unsigned char *类型,为什么要加*号,因为要指向a的地址 二.*(unsig ...

  4. C语言高级编程:char、signed char 和 unsigned char的使用区别

    1. 区别与联系: 1)在定义字符类型时一般使用char来定义 2)char被当成有符号或是无符号视不同编译器决定,由于ASCII码范围从0-0x7F(127),所以char无论被当成有符号还是无符号 ...

  5. char与signed char, unsigned char的区别

    一.开始 今天有一个困扰的问题,就是char与signed char, unsigned char这三者的区别. 二.三者之间 1.ANSI C 提供了3种字符类型,分别是char.signed ch ...

  6. char与signed char, unsigned char的区别?

    一.问题的提出 今天有一个困扰的问题,就是char与signed char, unsigned char这三者的区别. 二.三者之间关系 1.ANSI C 提供了3种字符类型,分别是char.sign ...

  7. oracle signed类型,char、signed char 和 unsigned char 的区别

    ANSI C 提供了3种字符类型,分别是char.signed char.unsigned char char相当于signed char或者unsigned char,但是这取决于编译器! 这三种字 ...

  8. 用unsigned char 表示字节

    在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) char与unsigned char之间的区别 首先在内存中,char与unsigned char没有什么不同 ...

  9. unsigned在c语言中的作用,c语言中unsigned char的意义何在

    DIEA 首先要纠正一个错误观念,char或者unsigned char本身和ASCII从来就没有什么对应关系.char就是一个单字节有符号整数,unsigned char就是一个单字节无符号整数.这 ...

最新文章

  1. OpenStack Ocata Release Notes
  2. “几何深度学习”受爱因斯坦启示:让AI摆脱平面看到更高的维度
  3. 如何获取 docker 容器(container)的 ip 地址
  4. 我的YUV播放器MFC小笔记:unicode编码、宽字符
  5. 机器学习:神经网络的模型构建
  6. 21天Jmeter打卡Day8 get/delete/put之间的请求
  7. leetcode 394.字符串解码 dfs
  8. php滑到底部自动加载更多,ListView滑动到底部自动加载更多
  9. 决策树准确率低原因_决策树算法
  10. 连锁门店数字化营销,打造千城万店新零售体系
  11. unity控制物体移动和转向
  12. Linux文本处理工具实践
  13. vue中Route和router、routes的关系
  14. cuda矩阵乘法(简单理解)
  15. 线性代数之——行列式公式及代数余子式
  16. 《秋波媚·七月十六日晚登高兴亭望长安南山》 陆游
  17. STK Components规格书
  18. Bugku 杂项 中国菜刀
  19. 文献笔记:《Can we still avoid automatic face detection?》读后感~
  20. require(): open_basedir restriction in effect. File

热门文章

  1. 如何挑选一副好的镜片
  2. Java实现窗体爱心移动特效
  3. 螺旋无限延伸_螺旋即是无限,这些旋转楼梯惊艳到你了吗?
  4. vulnhub靶机 trollcave-v1-2
  5. iOS应用安全开发你不知道的那些事儿
  6. BUUCTF闯关日记--[MRCTF2020]你传你呢(超详解)
  7. mui webapp分享到微信好友,朋友圈图片显示不出来问题解决
  8. Struts2 笔记
  9. 说说anchorPoint
  10. 实际项目的数据库设计基本方法