字符型在内存中的存储

由于此字符型只占一个字节 所以它就不存在大端存储和小端存储。

字符型数据在内存中的存储的是ASCII码值转换成的二进制的补码(有符号char的二进制也有原码,反码,补码之分)

↑的十进制的ASCII值为24

 

转换成二进制为00011000

 

所以↑在内存中存储的就是00011000

 

虽然数据在内存中都是以二进制的方式进行存储的,但是为了便于观察,显示的时候一般显示的是数据二进制转换成的十六进制

 

例如下图的调试中对内存的监视

2d3fcad472b344e98697b6554ee146d4.png

 上图的是小端存储,所以01,02等在开头

 

 

字符型数据分为有符号char(signed char)

 

 

和无符号char(unsigned char)

 

有符号char的8个比特位中

 

最高位(最左端的那一位)为符号位,符号位只表示正负(0为正,1为负)不存储数据

 

 

且有符号char在内存中存储的10000000被规定为是—128\n\n上面说了:

 

有符号char的二进制也要原码,反码,补码之分\n\n所以有符号char(signed char)

 

在内存中存储的11111111其实存储的是—1

 

 

因为—1的原码为10000001

 

反码为11111110

 

补码(等于反码+1)为11111111

 

而内存中存储的都是补码

 

 

所以有符号char的在内存中取值范围为10000000~01111111

 

换算成十进制就是—128~127

 

无符号char最高位(最左端的那一位)不为符号位,可以存储数据

 

且无符号数的原码,反码,补码相同

 

所以无符号char(unsigned char)

 

在内存中取值范围为00000000~11111111

 

换算成十进制为0~255

 

char,int,short int类型的值的加减其实是一个循环。

 

 

如下图是char类型的

f5a7113c3ec4495e92ffbe78bb5a20f0.png

 也就是说0~127之间+1就是实实在在的加了个1,如2+1=3

 

但当127+1就会变成—128

 

如果—128一直加1也最终会变成0,然后再循环

 

short,int类型的取值也类似

 

如下图

407a43dcb7b241f0bf0318f9c2541bf6.png

这一知识点在整型提升中有很大的作用

 

单独的一个char不标明是否有符号时,char是否有符号取决于编译器

 

那么怎么判断自己的电脑用的编译器char是有符号还是无符号的呢?

 

很简单只需简单的做个对比就行

 

如下图

e83d02b4e146428e8bf4e87e272f1f33.png

 

 所以我的电脑的编译器中只写char时char是有符号的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/413065.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

androidkiller的两种异常情况

第一种反编译时异常: Exception in thread “main” org.jf.dexlib2.dexbacked.DexBackedDexFile$NotADexFile: Not a valid dex magic value: cf 77 4c c7 9b 21 01 修改方法: 编辑 AndroidKiller 的 bin/apktool 目录下有一个 apktool.bat 文件 修改成…

04 SpringMVC响应数据之页面跳转控制+返回JSON数据+返回静态资源

1. handler方法分析 /*** TODO: 一个controller的方法是控制层的一个处理器,我们称为handler* TODO: handler需要使用RequestMapping/GetMapping系列,声明路径,在HandlerMapping中注册,供DS查找!* TODO: handler作用总结:* 1.接收请求参数(param,json,pathVariable,共享…

从uptime看linux平均负载

从前遇到系统卡顿只会top。。top看不出来怎么搞呢? Linux系统提供了丰富的命令行工具,以帮助用户和系统管理员监控和分析系统性能。在这些工具中,uptime、mpstat和pidstat是非常有用的命令,它们可以帮助你理解系统的平均负载以及资…

JavaEE学习笔记 2024-1-12 --Tomcat服务器、Servlet

JavaEE 个人整理非商业用途,欢迎探讨与指正!! JavaEE是企业级开发 是综合性非常强的阶段  包含的知识点:JavaSE,MySQL,JDBC,WEB(HTML,CSS,JS,前端框架),Servlet,JSP,XML,AJAX等技术 目录 JavaEE1.服务器2.Tomcat服务器2.1Tomcat的使用2.2Tom…

Visual Studio 与 SQL Server 常见报错解决方案(工作向)

前言 这篇文章从今天创建开始,会一直更新下去,以后遇到常见但是比较容易解决的报错会在本文进行更新,有需要的朋友可以收藏再看 目录 Visual Studio lc.exe已退出,代码为-1无法导入以下密钥文件xxx.pfx,该密钥文件…

go实现判断20000数据范围内哪些是素数(只能被1和它本身整除的数),采用多协程和管道实现

实现一个并发程序,用于寻找 20000 以内的所有素数。使用了 Goroutines 和 Channels 来分发和处理任务,并通过 WaitGroup(实现为 exitChan)来同步 Goroutines 的退出。 一.GO代码 package mainimport ("fmt""time…

【OJ】牛客链表刷题

题目 1. 链表分割1.1 题目分析1.2 代码 2. 链表的回文结构2.1 题目分析2.2 代码 这里两道与链表有关的题目均来自牛客。 1. 链表分割 1.1 题目分析 因为这里代码不能选择用c语言写,所以选择用c,因为c兼容c。 题目要求分割链表,我们可以直接弄成两个带哨…

Spring 中 HttpServletRequest 作为成员变量是安全的吗?

在使用spring框架开发的时候,经常会在controller类中看到 HttpServletRequest 对象参数,一般我们都是直接使用,但是它是何时、怎么注入到 spring 容器的呢 ?另外以成员变量注入的 request 是线程安全的吗 ? Controller public c…

SqlAlchemy使用教程(三) CoreAPI访问与操作数据库详解

SqlAlchemy使用教程(一) 原理与环境搭建SqlAlchemy使用教程(二) 入门示例及编程步骤SqlAlchemy使用教程(三) CoreAPI访问与操作数据库详解SqlAlchemy使用教程(四) MetaData 与 SQL Express Language 的使用SqlAlchemy使用教程(五) ORM API 编程入门 三、使用Core API访问与操作…

计算机网络——运输层(1)暨小程送书

计算机网络——运输层(1)暨小程送书 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU) 运输层概述两个主要协议运输层和网络层的关系网络层运输层总结 多路复用与多路分解多路复用多路分解不同的技术实现时分复用(TDM)频分复…

C语言从入门到实战——结构体与位段

结构体与位段 前言一、结构体类型的声明1.1 结构体1.1.1 结构的声明1.1.2 结构体变量的创建和初始化 1.2 结构的特殊声明1.3 结构的自引用 二、 结构体内存对齐2.1 对齐规则2.2 为什么存在内存对齐2.3 修改默认对齐数 三、结构体传参四、 结构体实现位段4.1 什么是位段4.2 位段…

【C语言】- 设置控制台文字颜色、大小和字体

【C语言】- 设置控制台标题、编码、文字颜色、大小和字体 文章目录 【C语言】- 设置控制台标题、编码、文字颜色、大小和字体1 - 设置控制台标题2 - 设置控制台编码3 - 设置控制台字体和大小参考链接 1 - 设置控制台标题 因为要用到 Windows API,所以需要包含头文件…