尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
C语言之整数存储底层逻辑用法解读
1.原码二进制表示法。最高位为符号位表示正负剩下位为数值位表示数值大小。例如以8位举例10的原码00001010-10的原码100010102.反码符号位不变其余位取反。例如以8位举例10的反码00001010-10的反码11110101正数的反码原码3.补码反码1。例如以8位举例10的补码00001010-10的补码11110110正数原码、反码、补码都相等负数原码 - 补码符号位不变其余位取反1补码 - 原码方法一-1符号位不变其余位取反方法二符号位不变其余位取反1二、整数存储1.计算机中的原反补规则所有的整型数据在计算机中都已补码的形式存储和运算。计算机在处理整型数据时会先将其看作int类型进行处理若超出int类型的范围则将其看作long long型进行处理。例如char a -10;计算机首先申请了1个字节的空间并将这篇空间命名为a-10的补码为11111111 11111111 11111111 11110110将这个补码存入a这片空间因为a只有1个字节所以只能存入最后一个字节即11110110。char b 10;计算机首先申请了1个字节的空间并将这篇空间命名为b10的补码为00000000 00000000 00000000 00001010将这个补码存入a这片空间因为a只有1个字节所以只能存入最后一个字节即00001010。2.有符号/无符号整数类型在计算机中char/short/int/long/long long属于有符号signed的整数类型此外计算机中还提供了一种无符号unsigned的整数类型。类型格式控制符比特位使用规则大小Byte范围特殊值有符号signed可写可不写的整数家族char%hhd/%c1位符号位 7位数值位1Byte-2^7~2^7-110000000-2^7short%hd1位符号位 15位数值位2Byte-2^15~2^15-110000000 00000000-2^15int%d1位符号位 31位数值位4Byte-2^31~2^31-110000000 00000000 00000000 00000000-2^31long%ld1位符号位 31位数值位4Byte-2^31~2^31-110000000 00000000 00000000 00000000-2^31long long%lld1位符号位 63位数值位8Byte-2^63~2^63-110000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000-2^63无符号unsigned的整数家族unsigned char%hhu8位数值位1Byte0~2^8unsigned short%hu16位数值位2Byte0~2^16unsigned int%u32位数值位4Byte0~2^32unsigned long%lu32位数值位4Byte0~2^64unsigned long long%llu64位数值位8Byte0~2^64以char为例char1位符号位 7位数值位数值unsigned char8位数值位数值0 1111111127011111111270 111111012601111110126............0 000000110000000110 000000000000000001 0000000-128100000001281 0000001-1100000011291 0000010-210000010130............1 1111110-1261 11111102541 1111111-12711111111255char1个符号位7个数值位最大值 1270 1111111最小值 -1281 1111111unsigned char8个数值位最大值 25511111111最小值 000000000因为char类型中10000000没有别的数可以表示计算机强制规定它为最小值-2^7-128。同理short类型中计算机强制规定10000000 00000000为最小值-2^15int和long类型中计算机强制规定10000000 00000000 00000000 00000000为最小值-2^31long long类型中计算机强制规定10000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000为最小值-2^633.相同字节大小转换12345678910111213141516171819202122232425262728293031323334353637intmain() {//-10的原码:10000000 00000000 00000000 00001010//-10的反码:11111111 11111111 11111111 11110101//-10的补码:11111111 11111111 11111111 11110110chara -10;//只有一个字节的空间只能存放下最后一个字节:11110110unsignedcharb -10;//只有一个字节的空间只能存放下最后一个字节:11110110printf(a%hhd,b%hhd\n, a, b);/*a:111101101.按照%hhd(有符号char类型)的格式输出所以要将11110110看作是1个符号位7个数值位2.将补码转换成原码:11110110-10001010(符号位是1为负数;负数的原码补码-1再符号位不变其余位取反)3.将原码转换成十进制:10001010--10b:111101101.按照%hhd(有符号char类型)的格式输出所以要将11110110看作是1个符号位7个数值位2.将补码转换成原码:11110110-10001010(符号位是1为负数;负数的原码补码-1再符号位不变其余位取反)3.将原码转换成十进制:10001010--10*/printf(a%hhu,b%hhu\n, a, b);/*a:111101101.按照%hhu(无符号char类型)的格式输出所以要将11110110看作是8个数值位2.将补码转换成原码:11110110-10001010(正数的原码、反码、补码相同)3.将原码转换成十进制:10001010-138b:111101101.按照%hhu(无符号char类型)的格式输出所以要将11110110看作是8个数值位2.将补码转换成原码:11110110-10001010(正数的原码、反码、补码相同)3.将原码转换成十进制:10001010-138*/return0;}4.不同字节大小转换1小字节转大字节符号位不变数值位不变其余位补符号位的数字。123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051intmain() {//-10的原码:10000000 00000000 00000000 00001010//-10的反码:11111111 11111111 11111111 11110101//-10的补码:11111111 11111111 11111111 11110110chara -10;//只有一个字节的空间只能存放下最后一个字节:11110110unsignedcharb -10;//只有一个字节的空间只能存放下最后一个字节:11110110printf(a%hd,b%hd\n, a, b);/*a:11110110 - a的类型是有符号char类型符号位:11.按照%hd(有符号short类型)的格式输出所以要先将11110110扩充为2个字节:11110110-11111111 11110110(符号位不变数值位不变其余位补符号位的数字即补1)2.将11111111 11110110看作是1个符号位15个数值位3.将补码转换成原码:11111111 11110110-10000000 00001010(符号位是1为负数;负数的原码补码-1再符号位不变其余位取反)4.将原码转换成十进制:10000000 00001010--10b:11110110 - b的类型是无符号char类型符号位:01.按照%hd(有符号short类型)的格式输出所以要先将11110110扩充为2个字节:11110110-00000000 11110110(符号位不变数值位不变其余位补符号位的数字即补1)2.将00000000 11110110看作是1个符号位15个数值位3.将补码转换成原码:00000000 11110110-00000000 11110110(符号位是0为正数;正数的原码、反码、补码相同)4.将原码转换成十进制:00000000 11110110-246*/printf(a%hu,b%hu\n, a, b);/*a:11110110 - a的类型是有符号char类型符号位:11.按照%hu(无符号short类型)的格式输出所以要先将11110110扩充为2个字节:11110110-11111111 11110110(符号位不变数值位不变其余位补符号位的数字即补0)2.将11111111 11110110看作是16个数值位3.将补码转换成原码:11111111 11110110-11111111 11110110(正数的原码、反码、补码相同)4.将原码转换成十进制:11111111 11110110-65526b:11110110 - b的类型是无符号char类型符号位:01.按照%hd(有符号short类型)的格式输出所以要先将11110110扩充为2个字节:11110110-00000000 11110110(符号位不变数值位不变其余位补符号位的数字即补0)2.将00000000 11110110看作是16个数值位3.将补码转换成原码:00000000 11110110-00000000 11110110(正数的原码、反码、补码相同)4.将原码转换成十进制:00000000 11110110-246*/return0;}2大字节转小字节直接强行截取。1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950intmain() {//-10的原码:10000000 00000000 00000000 00001010//-10的反码:11111111 11111111 11111111 11110101//-10的补码:11111111 11111111 11111111 11110110shorta -10;//只有两个字节的空间只能存放下最后两个字节:11111111 11110110unsignedshortb -10;//只有两个字节的空间只能存放下最后两个字节:11111111 11110110printf(a%hhd,b%hhd\n, a, b);/*a:11111111 111101101.按照%hhd(有符号char类型)的格式输出所以要先将11111111 11110110截取为1个字节:11111111 11110110-111101102.将11110110看作是1个符号位7个数值位3.将补码转换成原码:11110110-10001010(符号位是1为负数;负数的原码补码-1再符号位不变其余位取反)4.将原码转换成十进制:10001010--10b:11111111 111101101.按照%hhd(有符号char类型)的格式输出所以要先将11111111 11110110截取为1个字节:11111111 11110110-111101102.将11110110看作是1个符号位7个数值位3.将补码转换成原码:11110110-10001010(符号位是1为负数;负数的原码补码-1再符号位不变其余位取反)4.将原码转换成十进制:10001010--10*/printf(a%hhu,b%hhu\n, a, b);/*a:111101101.按照%hhu(无符号char类型)的格式输出所以要先将11111111 11110110截取为1个字节:11111111 11110110-111101102.将11110110看作是8个数值位3.将补码转换成原码:11110110-11110110(正数的原码、反码、补码相同)4.将原码转换成十进制:11110110-246b:111101101.按照%hhu(无符号char类型)的格式输出所以要先将11111111 11110110截取为1个字节:11111111 11110110-111101102.将11110110看作是8个数值位3.将补码转换成原码:11110110-11110110(正数的原码、反码、补码相同)4.将原码转换成十进制:11110110-246*/return0;}总结以上为个人经验希望能给大家一个参考
RELATED

相关推荐

网页慢,八成是图的问题:瞬图优化把一组产品图从 24.5MB 压到 3.9MB,我只点了一下

网页慢,八成是图的问题:瞬图优化把一组产品图从 24.5MB 压到 3.9MB,我只点了一下

网页慢,八成是图的问题:瞬图优化把一组产品图从 24.5MB 压到 3.9MB,我只点了一下 你花了一周做的官网,用户点开三秒没出来,顺手就关了。 你第一反应是“后端太慢”“网络不行”。但真去查,接口 50ms 就回…

📅 2026/11/11 11:43:40
Kubernetes 上手实战(5):存储卷与持久化

Kubernetes 上手实战(5):存储卷与持久化

上一篇把配置与密钥从镜像剥离,但 Pod 重建后可写层仍会消失。本篇区分临时卷与持久卷,并用 PVC 完成一次“写入数据、删除 Pod、重新读取”的实验,建立存储生命周期的正确边界。 一、痛点:Pod 可替换,数据不能一起消…

📅 2026/11/6 12:43:42
Kubernetes 上手实战(7):弹性伸缩与健康检查

Kubernetes 上手实战(7):弹性伸缩与健康检查

上一篇用 Gateway API 把请求送到 Ready 后端。本篇定义 Ready 到底意味着什么,并用 Metrics Server、资源请求与 HPA 构成闭环:指标上升触发扩容,负载下降后再受控缩容。 一、痛点:活着、就绪和启动完成不是一回事 livenessPro…

📅 2026/11/7 7:31:34
MORE NEWS

更多资讯

📰

在长春考高压电工证良心建议:高压电工证薪资前景与职业发展全解析

在长春考高压电工证良心建议:高压电工证薪资前景与职业发展全解析 你是不是正缺一张高压电工证,却不知道从哪下手?别急,咱们就从头聊起。 急需特种作业证才能上岗找工作…

📰

东莞补办电工证去哪里 丢了证多久拿证还能上岗

东莞补办电工证去哪里 丢了证多久拿证还能上岗 特种作业证丢了,找工作卡在门口,真的让人着急。尤其是电工证这种高需求的证书,没它连门都进不去。东莞补办电工证去哪里?这是很多学员问过的问题。现在就来聊聊,丢了证还能不能及时补办,多久拿证,以及怎…

📰

电工证本怎么换卡怎么报名全流程避坑指南

电工证本怎么换卡怎么报名全流程避坑指南 你手里的电工证本要换新卡了,却不知道怎么报名?怕被中介骗钱?别急,这波操作我来给你说清楚,从报名到考试,全流程都给你安排得明明白白。 电工证本怎么换卡,关键在正规渠道…

📰

比亚迪低压电工证报名郑州报考避坑指南

比亚迪低压电工证报名郑州报考避坑指南 之前考的证在外省能不能转过来?我理解你的心情,很多人在外地打工时考了证,但回到郑州后才发现证不通用,甚至还要重新考。特别是像 比亚迪低压电工证报名 这类证书,不仅关系到能否上岗,还涉及到…

📰

电工证学时在哪里看怎么查电子证书全攻略

电工证学时在哪里看怎么查电子证书全攻略 实操考试心里没底怕挂科?别急,你不是一个人。很多人在考电工证前都会担心学时是否够、电子证书会不会查不到,其实只要方法对,一切都不难。 电工证学时在哪里看?别慌,这里教你查…

📰

东港考低压电工证丢了怎么办?官方回应来了,工地太忙根本没时间复习考试

东港考低压电工证丢了怎么办?官方回应来了,工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,这几乎是每个在一线施工的电工朋友的心声。特别是像我们这种在周口从事公路工程的,天天在工地上跑,一忙起来连吃饭都顾不上,更别说抽空复习低压电工证…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬