首页 > 其他分享 >char类型的-128到底是个神马东西?

char类型的-128到底是个神马东西?

时间:2024-10-11 17:48:02浏览次数:8  
标签:0000 符号 补码 char 神马 128 正数 1000

char类型的-128的补码是什么样的?

在计算机中,负数通常使用补码形式来表示。对于一个有符号的 char 类型,其大小为 8 位(1 字节),可以表示从 -128 到 127 的整数。

-128 是有符号 8 位整数能够表示的最小值。它的二进制补码表示是特殊的,因为它是唯一一个没有正数对应项的负数。在 8 位系统中,-128 的补码直接就是 1000 0000

这里是如何得到这个结果的简要解释:

  1. 首先,考虑正数 128 的二进制表示,它会是 1000 0000,但是这超出了 8 位所能表示的范围(0 到 127)。
  2. 因为 -128 没有对应的正数值,所以它不需要通过正常的“取反加一”过程来得到补码。实际上,1000 0000 直接被定义为 -128 的补码。

因此,-128 的 8 位二进制补码表示就是 1000 0000。这是个特殊情况,因为在 8 位二进制中,这个模式既是 -128 的补码也是 -128 的原码和反码。

也就是说char类型的-128的补码,它的符号位参与数字大小的计算了吗?

在有符号的 8 位 char 类型中,-128 的二进制补码表示是 1000 0000。这里的最高位(最左边的一位)确实是符号位,它表明这个数是一个负数。

在补码表示法中,符号位并不直接参与数值大小的计算,但它确实影响了整个数值的解释。对于正数,符号位是 0,而对负数来说,符号位是 1。补码系统的设计使得加法和减法运算可以统一处理,不需要特殊的硬件来判断是否需要进行减法操作。

对于 -128 的情况:

  • 它的补码形式是 1000 0000
  • 符号位是 1,这表示这是一个负数。
  • 剩下的 7 位 000 0000 在这里并没有单独表示一个正数的值,因为这是 -128 的特殊情况。

通常,如果我们有一个负数的补码,我们可以通过以下步骤将其转换回原码(即绝对值):

  1. 将除了符号位外的所有位取反。
  2. 对结果加 1。

但对于 -128 (1000 0000),如果尝试这样做:

  • 取反:0111 1111
  • 加 1:1000 0000

我们会发现最终还是得到了 1000 0000,这是因为 -128 没有对应的正数形式,它是补码表示中的一个特例。因此,在这种情况下,符号位实际上定义了整个数值,并且没有独立的“数字大小”可以与之分离。整个 8 位模式作为一个整体表示 -128。

”这是因为 -128 没有对应的正数形式“这句话是什么意思?

这句话的意思是,在 8 位有符号整数的补码表示中,-128 是一个特殊情况,因为它没有一个对应的正数值。通常,每个负数都有一个对应的正数值(绝对值),例如 -1 的补码是 1111 1111,其对应的正数 1 的二进制表示是 0000 0001

但是,对于 -128,它的 8 位补码表示是 1000 0000。如果我们试图通过常规的方法(取反加 1)来找到与之对应的正数,我们会得到以下结果:

  • 取反:0111 1111
  • 加 1:1000 0000

这又回到了 1000 0000,也就是 -128 本身。因此,-128 在 8 位有符号整数中是一个边界情况,它没有一个可以与其相匹配的正数形式。这是因为 8 位有符号整数能够表示的范围是从 -128 到 127,而 128 超出了这个范围。

简而言之,-128 没有一个在 8 位内的正数对应项,因为它已经是最小的负数了,再往更小的方向就超出了 8 位所能表示的范围。

#include<stdio.h>

int main()
{
	char a = 2183;
	printf("%d\n", a);
	//1000 1000 0111,2183的补码
	//1000 0111,截断后的补码;
	//符号位为1,为负数,需要转化成源码
	//1000 0110
	//1111 1001
	char b = 129;
	printf("%d\n", b);
	//129的补码:0000 0000 0000 0000 0000 0000 1000 0001
	//截断后的补码:1000 0001
	//减1取反(符号位不变):1111 1111 为-127

	return 0;
}

正常情况下,符号位不参与数字大小的计算

在正常情况下,符号位不直接参与数字大小的计算。在补码表示法中,符号位(最高位)用于指示数值的正负,但实际的数值大小是由剩余的位来表示的。

对于一个有符号的 8 位二进制数:

  • 如果符号位是 0,那么这个数是非负数(包括0和正数),其值由剩下的7位决定。
  • 如果符号位是 1,那么这个数是负数,其绝对值也由剩下的7位决定,但是需要通过补码到原码的转换来得到。

例如,考虑以下 8 位二进制数:

  • 0111 1111 表示 +127,这里的 0 是符号位,表明这是一个正数,剩下的 111 1111 表示 127。
  • 1000 0001 表示 -127,这里的 1 是符号位,表明这是一个负数,剩下的 000 0001 在取反加 1 后表示 127 的补码形式。

当进行算术运算时,符号位会自然地参与到整个运算过程中,而不需要单独处理。例如,两个补码表示的数可以直接相加或相减,结果也是以补码的形式给出,计算机硬件会自动处理符号位的进位和借位问题。

总结来说,符号位本身并不直接用来计算数值的大小,但它确实决定了整个数值的正负,并且在进行算术运算时,它是整个二进制数的一部分。

标签:0000,符号,补码,char,神马,128,正数,1000
From: https://blog.csdn.net/fhgfyrsg/article/details/142857992

相关文章

  • 如何在springboot中,全局配置produces="text/plain;charset=UTF-8"
    为什么要使用produces="text/plain;charset=UTF-8"?当不用这个配置时,接口返回的数据,是有斜杠的 配置后,就正常了 以前我的配置方式,是在每个接口上,都添加上produces="text/plain;charset=UTF-8"。但是这样显示不太好,每个接口都加的话,会比较耗费时间如何做到全局配置使用W......
  • python 09-pycharm连接远程服务器
    准备一个云服务器(linux操作系统)找一个免费试用的服务器用于练习,这里用这个服务器:在pycharm中连接服务器‌-VirtualEnvironment‌:‌Python的虚拟环境,‌允许每个项目拥有独立的库和解释器,‌避免依赖冲突。‌通过virtualenv等工具创建,‌适用于隔离项目依赖。‌‌-Sy......
  • pycharm设置
       Pycharm如何导入本目录下的.py文件方法一方法二 1.pytest运行报错pytest-rerunfailures包含重跑参数pytest-html 包含html报告参数 2.playwright在pytest框架上运行需要安装pipinstallpytest-playwright 3.pip安装包报错,可以设置国内镜像源sud......
  • 关于 PyCharm 2024安装使用 (附加激活码、补丁)
    第一步:下载安装包访问IDEA官网,下载安装包,下载链接如下:https://www.jetbrains.com.cn/pycharm/第二步,安装完成之后,下载补丁下载地址(里面包含激活码)补丁下载成功后,打开标注的文件文件夹,进入到文件夹/jetbra,目录如下:注意:补丁所属文件夹需单独存放,且放置的路径不......
  • 安装 Anaconda、PyTorch(GPU 版)库与 PyCharm
    Anaconda是一款巨大的Python环境集成平台,里面包含了Python解释器、JupyterNotebook代码编辑器以及很多的第三方库,所以安装Anaconda后我们无需再安装Python解释器,非常方便。一、安装Anaconda1.卸载Anaconda(可选)如果我们原来的电脑上安装过Anaconda,为了避免重复安......
  • 【2024版】最简单的Pycharm安装 教程(新手小白都能学会)
    PyCharm安装教程1、点击右边链接→PyCharm安装包我们以专业版为例,下载完成后打开安装包点击下一步先选择安装位置,然后点击下一步勾选所有选项,点击下一步直接点击安装等待安装完成激火后PyCharm就可以使用了PyCharm专业版安装包、集活码获取:点击这里最......
  • String类型对象每个元素转换为List<Character>或List<String>
    Stringstr="abc";第一眼想到是通过String#toCharArray()转换为char[],然后再转换为List,尝试用Arrays.asList(T...a):char[]chars=str.toCharArray();List<char[]>list=Arrays.asList(chars);System.out.println(list);发现转换结果不符合预期,因为是原始类型数组,被......
  • 基于Echarts+HTML5可视化数据大屏展示-大数据可视化通用版
    博主主页:猫头鹰源码博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万+、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作​主要内容:毕业设计(Javaweb项目|小程序|Python|HTML|数据可视化|SSM|SpringBoot|Vue|Jsp|PHP......
  • ChatBot: 通过高性能LLM批量产生Character
    基于LLM创建Character,能够实现ChatBot社区的AGI吗?如果高性能的LLM能够产生中高质量的提示词并且被低性能但廉价的LLM使用,那么就有了很大的使用价值.怎么定义一个Character我认为至少需要以下几个内容:Name:Thenamecanincludefirstandlastnames.(3-40characters......
  • ChatBot: 通过高性能LLM批量产生Character
    基于LLM创建Character,能够实现ChatBot社区的AGI吗?如果高性能的LLM能够产生中高质量的提示词并且被低性能但廉价的LLM使用,那么就有了很大的使用价值.怎么定义一个Character我认为至少需要以下几个内容:Name:Thenamecanincludefirstandlastnames.(3-40characters......