C语言基础(5)-有符号数、无符号数、printf、大小端对齐
1.有符号数和无符号数
有符号数就是最高位为符号位,0代表正数,1代表负数
无符号数最高位不是符号位,而就是数的一部分而已。
1011 1111 0000 1111 1111 0000 1011 1010,如果当有符号数看待,那么他是一个负数的补码,如果当一个无符号数看待,他就是一个正数的原码
无符号数最小为0,不可能是负数
定义一个无符号的int
unsigned int a; //使用unsigned int 定义了一个无符号的int变量,名字叫a
short,long,long long, unsigned int
short是短整型,一般short是int的一半大小,short在32位的windows下是2个字节
short最大能存放多大的十六进制数?7fff
当一个小的数据类型赋值给一个大的数据类型,不会出错,因为编译器会自动转化,但当一个大的类型赋值给一个小的数据类型,那么就可能丢失高位。
long是长整型,long的大小变化比较多,在32位的windows下是4个字节,在64位的windows是4个字节,在32位的linux是4个字节,在64位的linux是8个字节。
long long长长整型,longlong在32位系统和64位系统下都是8个字节
unsigned int,unsigned short ,unsigned long, unsigned long long
100默认是int,100L代表long类型的常量,100LL代表long long类型的常量
100u代表unsigned int类型的常量,如果想表达一个unsigned long long 类型的常量,100ull
9l,9L,9ll,9LL,9u,9ull,9ULL
2. printf输出值
%d是输出一个有符号的10进制int类型
%o,输出8进制的int
%x,输出16进制的int
%X,输出16进制的int,但abcd这些都用大写字母
%u,输出一个10进制的无符号数
%p 输出内存地址
%u的意思是输出一个unsigned int 类型的数
%lu的意思是输出一个unsigned long 类型的数
%f 的意思是输出float类型的数
%lf是输出double ,long double 类型的浮点数
%c是输出一个char类型的字符
例:以十六进制形式输出一个byte值,带前缀,空位补0:
byte a = 10;
printf("a is: %#04x\n", a);
得到的值是:0x0a
# 代表加上十六进制的前缀也就是0x, 04代表输出宽度为4,宽度不足以0补齐。
3. 大端对齐和小端对齐
计算机的内存最小单位是什么?是BYTE,是字节,一个大于BYTE的数据类型在内存中存放的时候要有先后顺序。
高内存地址放整数的高位,低内存地址放整数的低位,这种方式叫到着放,术语叫小端对齐。X86和ARM都是小端对齐的。
高内存地址放整数的低位,低内存地址放整数的高位,这种方式叫正着放,术语叫大端对齐,很多unix服务器的CPU是大端对齐的。
定义一个int类型的变量a,在VS下可以看到其在内存中的排列方式如下:
说明windows系统是小端对齐的。
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库