【C语言进阶】整型在内存中的存储(下)

简介: 【C语言进阶】整型在内存中的存储

2.unsigned和signed整型类的区别

先来一道题,通过题目来摸索!


char a= -1;


  原码:10000000 00000000 00000000 00000001


  反码:111111111  11111111  11111111 11111110


  补码:11111111 11111111 11111111 11111111(内存中存储方式:补码)


  但是char 占一个字节


 11111111


 要以%d输出,那么就会涉及整型提升。


                        整型提升的规则:与比自身类型低或者一些运算时,会发生整型提升


                        1.signed类型:正数提升时,补0;负数补1;(补当作最高位的符号位)


                        2.unsigned类型:提升时,直接补0;


那么,char a= -1,以%d输出时,整型提升时,


11111111


补后:11111111 11111111 11111111 11111111 存在内存中为补码,输出时要以原码输出


原码:10000000 00000000 00000000 00000001


(补码变原码,依旧是先取反(符号位不变!),再加一)


所以最终结果为 -1


signed char a = -1与char a = -1 是一样的。


在很多环境下,char,int都是有符号数!


所以结果还是 -1


unsigned char a = -1


  原码:10000000 00000000 00000000 00000001


  反码:111111111  11111111  11111111 11111110


  补码:11111111 11111111 11111111 11111111


  只取后面一个字节


 11111111


  整型提升(无符号数提升时补0 ):00000000 00000000 00000000 11111111(内存以补       码方式存储)


  最高位为0,是正数,正数原反补都相同,所以结果是  255.


一起来看结果

相信大家已经有所了解,并且熟悉了吧,当然还需要多多练习!

趁热打铁吧!

(%u为无符号输出)


原10000000 00000000 00000000 10000000


反11111111 11111111 11111111 01111111


补11111111 11111111 11111111 10000000


char 10000000


整型提升 11111111 11111111 11111111 10000000


结果 :4294967168

答案:-10


结果对了吗?


总结

     1.在内存中,不管是正数还是负数,存储形式都是以补码的形式存储!!


     2.一般情况下,int,char等整型通常是有符号数。


     3.大小端


          大端:数据的低位保存到了内存中的高地址处,数据的高位保存到了内存的低地址处


          小段:数据的低位保存到了内存中的低地址处,数据的高位保存到了内存的高地址处

目录
相关文章
|
1天前
|
程序员 编译器 C语言
C语言----动态内存分配(malloc calloc relloc free)超全知识点
C语言----动态内存分配(malloc calloc relloc free)超全知识点
14 6
|
1天前
|
存储 程序员 编译器
C语言:动态内存管理
C语言:动态内存管理
11 1
|
1天前
|
存储 编译器 程序员
C语言:数据在内存中的存储
C语言:数据在内存中的存储
13 2
|
1天前
|
存储 编译器 C语言
C语言:字符函数 & 字符串函数 & 内存函数
C语言:字符函数 & 字符串函数 & 内存函数
15 2
|
1天前
|
存储
整数和浮点数在内存中存储
整数的2进制表⽰⽅法有三种,即原码、反码和补码。
17 0
|
1天前
|
存储 算法 编译器
整形和浮点型是如何在内存中的存储
整形和浮点型是如何在内存中的存储
|
1天前
|
存储 C语言 开发者
【C言专栏】C 语言实现动态内存分配
【4月更文挑战第30天】C语言中的动态内存分配允许程序运行时按需分配内存,提供处理未知数据量的灵活性。这涉及`malloc()`, `calloc()`, `realloc()`, 和 `free()`四个标准库函数。`malloc()`分配指定大小的内存,`calloc()`同时初始化为零,`realloc()`调整内存大小,而`free()`释放内存。开发者需谨慎处理内存泄漏和指针使用,确保程序的稳定性和性能。动态内存分配是C语言中的重要技能,但也需要良好的内存管理实践。
|
1天前
|
存储 程序员 C语言
C语言进阶第九课 --------动态内存管理-2
C语言进阶第九课 --------动态内存管理
|
1天前
|
C语言
C语言:内存函数(memcpy memmove memset memcmp使用)
C语言:内存函数(memcpy memmove memset memcmp使用)
|
1天前
|
缓存 安全 编译器
【C 言专栏】C 语言函数的高效编程技巧
【5月更文挑战第1天】本文探讨了C语言中函数的高效编程技巧,包括函数的定义与作用(如代码复用和提高可读性)、设计原则(单一职责和接口简洁)、参数传递方式(值传递、指针传递和引用传递)、返回值管理、调用约定、嵌套与递归调用,以及函数优化技巧和常见错误避免。掌握这些技巧能提升C语言代码的质量和效率。
【C 言专栏】C 语言函数的高效编程技巧

热门文章

最新文章