c++整数在内存中的存储方法是什么
发表于:2025-11-14 作者:千家信息网编辑
千家信息网最后更新 2025年11月14日,今天小编给大家分享一下c++整数在内存中的存储方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们
千家信息网最后更新 2025年11月14日c++整数在内存中的存储方法是什么
今天小编给大家分享一下c++整数在内存中的存储方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
存放格式:
对整数来说,数据存放在内存中其实存放的是补码。原因是在计算机系统中,数值一律补码来表示和存储,原因在于,使用补码,可将符号位和数值域统一处理,同时,加法减法也可以统一处理(cpu只有加法器),此外,补码和原码相互转换,运算过程完全相同,不需要额外的硬件电路。
大小端介绍:
大段存储模式:指数据的低权值位存放于内存的高地址,高权值位存放于内存的低地址。
小段存储模式:指数据的高权值位存放于内存的高地址,低权值位存放于内存的低地址。
#define _CRT_SECURE_NO_WARNINGS 1#include#include int Judge1() //法一:利用地址int强转char判断。{ int i = 1; return *(char *)&i; //i共四个地址,取地址取最小的,再加个强转解引用后只取地址最小空间里的值。}int Judge2() //法二:利用unio联合体的特点:所有成员共享空间。联合体空间大小为成员所占空间的最大值,空间小的从低地址开始。{ union { int a; char i; }u1; u1.a = 1; return u1.i;}int main(){ int ret; ret = Judge2(); if (1 == ret) { printf("小端存储模式\n"); } else if (0 == ret) { printf("大端存储模式\n"); } system("pause"); return 0;}
在内存中进行加减过程
题一:
char a = -1; //原码 1000 0001 补码 1111 1111 signed char b = -1; //原码 1000 0001 补码 1111 1111 unsigned char c = -1; //原码 1000 0001 补码 1111 1111 //%d char转int型发生×××提升,有符号数发生×××提升前面补符号位,无符号数补0 printf("a=%d\n", a); //提升后 a=1111 1111 1111 1111 1111 1111 1111 1111 (补码) 输出原码:1000 0000 0000 0000 0000 0000 0000 0001 =-1 printf("b=%d\n", b); //同上 printf("c=%d\n", c); //提升后 c=0000 0000 0000 0000 0000 0000 1111 1111 (补码) 输出原码:0000 0000 0000 0000 0000 0000 1111 1111 =255题二:
1>char a = -128; //原码 1 1000 0000 符号位溢出后截断 变为1000 0000 补码:1 1000 0000再次截断1000 0000 printf("%u\n", a); //×××提升:1111 1111 1111 1111 1111 1111 1000 0000 (补码) 因为是无符号×××输出,所以输出该二进制对应的十进制数。2>char a = 128; //原码:0 1000 0000 符号位溢出后截断 变为1000 0000 补码:1 1000 0000再次截断1000 0000 printf("%u\n", a); //由此可看出答案同上题三:
unsigned char i = 0; //表示数值范围:0~255 for (i = 0; i <= 255; i++) //一直在0~255之间,当i=255再加1时,发生截断后就又变为0了 1111 1111+0000 0001=1 | 0000 0000 =0 { printf("%d\n", i); //所以一直循环,(死循环)重复打印0~255 if (i <= 250) { Sleep(30); } else{ Sleep(1000); } }题四:
unsigned int i ; //表示数值范围:0~2^32-1 for (i = 9; i >=0; i--) //一直在0~2^32-1之间,当i=0再减1时,发生截断后就又变为0了 0000 0000 .... 0000 + 1111 ...1111=1111....1111 =1... 1111 因为是无符号数,所以为2^32-1 { printf("%d\n", i); //所以一直循环,(死循环)打印9、8、7...0 后从2^32-1开始减 if (i <= (pow(2,32)-10)) { sleep(10); } else{ sleep(1000); } }题五:
char a[1000]; //-128~127 int i; for (i = 0; i < 1000; i++) { a[i] = -1 - i; //-1、-2... 当执行到a[127]=-1-127=-128后,下一次执行 a[128]=-1-128=1111 1111+1000 0000=0111 1111(截断后)=127 //127再继续减减到0,该0之前元素个数即为strlen(a)的值=-1~-128+127~1=255 } printf("%d\n", strlen(a)); //'\0'=0;即求0之前多少个元素。(strlen不带\0)以上就是"c++整数在内存中的存储方法是什么"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。
补码
地址
内存
存储
符号
空间
模式
知识
篇文章
循环
输出
整数
数值
数据
方法
c++
最小
之间
元素
内容
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
实惠的erp软件开发设计
氧气网络技术有限公司
sql删除数据库表
国家网络安全作文450字
服务器管理口怎么设置
数据库事务的理解
网络安全信息管理系统
天财商龙数据库
软件开发合同 人月
远程删数据库
软件开发配置管理工具
武汉政务服务管理软件开发
分布式数据库缓存一致性怎么解决
pdb蛋白质数据库
福建省计算机网络技术学校
微博是一种网络技术应用它篇幅
数据库设置关联登录名
网络技术销售工作业绩
德州二中2017级数据库
优炫数据库底层是什么原因
服务器跑代码断网
热门软件开发平台
服务器静电手环
软件开发技术服务进项较少
获取数据库形成表格
北京市村庄规划数据库
华为网络安全图片
图书馆网络安全
碳运输数据库
数据库排队设计