用unsigned char 表示字节
在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 <stdio.h>
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时,则有区别了。
转载于:https://www.cnblogs.com/gaoxianzhi/p/6683649.html
用unsigned char 表示字节相关推荐
- 打印不同对象的字节表示 ( 对int*强制转换成unsigned char*的理解 )
此文章参考<深入理解计算机系统>P31. 先看如下代码: 12345的十六进制表示为:0x00003039 1 #include <stdio.h> 2 3 int main ...
- 2字节char转16进制unsigned char或者int
在C语言中,常常需要将txt文件转换成bin文件,所以需要将两字节的字符,转换成16进制的unsigned char类型.有时也会将int型转换成两字节的char,还原时也需要转换. /*! @Bri ...
- linux 下byte,char,unsigned char的区别
在linux中,对byte的定义为无符号char,而char默认为有符号char. #ifndef BYTE #define BYTE unsigned char #endif 以下ZZ百度知道: 在 ...
- char和unsigned char
网络编程中一般都用unsigned char,而不用char,是因为把char强制转换成int或long时,系统会进行类型扩展. #include <stdio.h>int main() ...
- unsigned char对应java_Java的数据类型,怎么就没有uchar呢
作者:陈珏秀 真头疼,因为java的数据类型没有uchar.今天把之前用C写的程序改成java的,但是由于java的数据类型中没有uchar,部分内容得不到相关转换. 我想 将图像src的像素值,然后 ...
- C/C++ unsigned char*类型
C++ unsigned char *是表示无符号字符指针的意思. 细节如下: char 前面添加unsigned表示是无符号的字符,也就是不可以存储负数: 在数据类型后面加*表示指针的意思: 指针是 ...
- C语言高级编程:char、signed char 和 unsigned char的使用区别
1. 区别与联系: 1)在定义字符类型时一般使用char来定义 2)char被当成有符号或是无符号视不同编译器决定,由于ASCII码范围从0-0x7F(127),所以char无论被当成有符号还是无符号 ...
- unsigned char s1 : 2的用法
#include<stdio.h> #include<stdlib.h> //默认按照四字节对齐 //#pragma pack(1) union V {struct X{uns ...
- C++之char , signed char , unsigned char
ANSI C 提供了3种字符类型,分别是char.signed char.unsigned char.而不是像short.int一样只有两种(int默认就是unsigned int). 三者都占1个字 ...
最新文章
- 随机蕨(Random Fern)
- endnote国标_Citavi 与 Endnote 在 Word 插入引用,哪个更适合你?
- 对HashMap对象的键值对内容进行排序
- 架构设计:文件服务的设计与实现
- delphi adoquery 上一个下一个_从一个起点冲向下一个起点
- 社群数据分析:你运营的社群是好社群吗?
- Sort Integers by the Number of 1 Bits
- 有哪些比较基础的优质计算机书籍?
- Linux重定向console口控制台,Linux重定向console口控制台(Fedora)
- 文件上传解析器MultipartResolver
- A cycle was detected in the build path of project 'core'. The cycle consists of projects {core, sms}
- 数据库高并发的解决方案
- 帮助 help 命令
- [论文阅读笔记14]Nested named entity recognition revisited
- (个人笔记-无用勿喷)Windows软件包的安装与卸载
- SAP世界生存指南(2017版)
- HW:红队眼中的防守弱点与蓝队应对攻击的常用策略
- 串行同步通信“时钟同步”怎么理解?
- 速卖通物流发货用热敏打印机BTP-K900(U)1纸张高度与软件下发票面高度不符
- 宝宝智能起名,免费起名实现方案,带源码
热门文章
- 不生成新数组的迭代器方法:forEach()every()some()reduce()reduceRight()
- JavaScript基础——处理字符串
- 接口到底是什么(一语道破)
- 【转】奴性哲学十句话,洗脑常用词!!!
- Firefox 插件:鲜味 del.icio.us,和朋友分享你的收藏
- ASP.NET MVC 3.0学习系列文章—Model in ASP.NET MVC 3.0
- Elasticsearch--建议器
- 关于org.apache.lucene.queryParser.ParseException: Encountered 解决方法
- VSS (Visual Source Safe 2005) 用法详解
- 【配置文件】log4j是什么log4j