怎样建网站赚钱,口碑营销5t,短视频seo什么意思,网页设计实训总结心得体会C语言-整数和浮点数在内存中的存储-详解-上 1.前言2.整数2.1无符号整数2.2原码、反码、补码符号位最大值转换过程补码的意义简化算术运算易于转换方便溢出处理 1.前言
在C语言的使用中#xff0c;需要时刻关注数据的类型#xff0c;不同类型交替使用可能会发生错误#xff… C语言-整数和浮点数在内存中的存储-详解-上 1.前言2.整数2.1无符号整数2.2原码、反码、补码符号位最大值转换过程补码的意义简化算术运算易于转换方便溢出处理 1.前言
在C语言的使用中需要时刻关注数据的类型不同类型交替使用可能会发生错误下面通过一个简单的例子来说明这一点
#include stdio.h
int main()
{int n 5.5;float* p (float*)n;printf(%d\n, n);printf(%f\n, *p);*p 5.5;printf(%d\n, n);printf(%f\n, *p);return 0;
}这段代码的运行结果 同一个5.5为什么会输出不同的结果 要理解这个问题需要清楚整数和浮点数如何在内存中存储。 下文将详细介绍整数在内存中的存储。
2.整数
2.1无符号整数
这种数只能表示非负整数。 在二进制表示中每一位都是数值位没有符号位。 如
unsigned int n1 0xffffffff;
printf((n1 0x%x)%u,n1,n1);
printf(INT_MAX%d\n, INT_MAX);n1的二进制表示 运行结果 这里的INT_MAX指的是有符号整数的最大值可以发现无符号整数能比有符号整数更大。
2.2原码、反码、补码
原码、反码、补码是整数的三种二进制表示方法。 对于无符号整数三种方法没有区别。 对于有符号整数三种方法均分为符号位和数值位两个部分。
符号位
符号位指的是最高位用0表示正数用1表示负数。
最大值
整数占32个比特位 因此无符号的最大值为 有符号的多了一个符号位因此最大值为 可以简记为二十亿。 在实际应用中特别是在OJ题中题目最后有时会给数据范围。 这时需要与数据类型可存储的最大值比较判断是否会溢出以此调整做题方法。 例如在我的用C语言完成高精度问题中就展示了一种溢出的实例与相应的解决方法。 再例如
int n2 0xffffffff;
printf((n2 0x%x)%d\n, n2, n2);n2的二进制表示
运行结果 n2 在内存中的表示为 0xffffffff运行结果会显示 n2 的值为 -1。 最高位是1因此是个负数但-1是怎么来的这就涉及到了原码、反码、补码的相互转换。
转换过程
正数原码、反码、补码相同。 负数
原码由数值直接翻译为二进制得到。反码由原码符号位不变其他位按位取反得到。补码由反码加一得到。
示例 在内存中整数存的是补码而赋值操作是将二进制值直接赋给变量并直接影响它在内存中的值这里可以调试看看 而打印的是数值需要将补码再次转化成原码 补码-符号位不变其他位按位取反-反码-加一-原码 这就是为什么给n2赋值了0xffffffff后打印结果为-1。
负数原码、反码、补码的相互转换 #mermaid-svg-aMC25CEufTCvDNhS {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-aMC25CEufTCvDNhS .error-icon{fill:#552222;}#mermaid-svg-aMC25CEufTCvDNhS .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-aMC25CEufTCvDNhS .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-aMC25CEufTCvDNhS .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-aMC25CEufTCvDNhS .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-aMC25CEufTCvDNhS .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-aMC25CEufTCvDNhS .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-aMC25CEufTCvDNhS .marker{fill:#333333;stroke:#333333;}#mermaid-svg-aMC25CEufTCvDNhS .marker.cross{stroke:#333333;}#mermaid-svg-aMC25CEufTCvDNhS svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-aMC25CEufTCvDNhS .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-aMC25CEufTCvDNhS .cluster-label text{fill:#333;}#mermaid-svg-aMC25CEufTCvDNhS .cluster-label span{color:#333;}#mermaid-svg-aMC25CEufTCvDNhS .label text,#mermaid-svg-aMC25CEufTCvDNhS span{fill:#333;color:#333;}#mermaid-svg-aMC25CEufTCvDNhS .node rect,#mermaid-svg-aMC25CEufTCvDNhS .node circle,#mermaid-svg-aMC25CEufTCvDNhS .node ellipse,#mermaid-svg-aMC25CEufTCvDNhS .node polygon,#mermaid-svg-aMC25CEufTCvDNhS .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-aMC25CEufTCvDNhS .node .label{text-align:center;}#mermaid-svg-aMC25CEufTCvDNhS .node.clickable{cursor:pointer;}#mermaid-svg-aMC25CEufTCvDNhS .arrowheadPath{fill:#333333;}#mermaid-svg-aMC25CEufTCvDNhS .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-aMC25CEufTCvDNhS .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-aMC25CEufTCvDNhS .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-aMC25CEufTCvDNhS .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-aMC25CEufTCvDNhS .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-aMC25CEufTCvDNhS .cluster text{fill:#333;}#mermaid-svg-aMC25CEufTCvDNhS .cluster span{color:#333;}#mermaid-svg-aMC25CEufTCvDNhS div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-aMC25CEufTCvDNhS :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 符号位不变,其他位按位取反 加一 符号位不变,其他位按位取反 加一 原码 反码 补码 补码的意义
现代计算机系统几乎都采用补码表示有符号的整数原因在于补码具有许多优点
简化算术运算
例如补码能使减法变成加法 1 - 1 1 (-1): 因此在硬件设计中只需要一个加法器就能完成所有的基本算术运算。
易于转换
转换一个有符号整数到它的相反数的过程在补码表示中非常简单
取反加一 #mermaid-svg-y0s6fkZqwitqNHQh {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-y0s6fkZqwitqNHQh .error-icon{fill:#552222;}#mermaid-svg-y0s6fkZqwitqNHQh .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-y0s6fkZqwitqNHQh .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-y0s6fkZqwitqNHQh .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-y0s6fkZqwitqNHQh .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-y0s6fkZqwitqNHQh .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-y0s6fkZqwitqNHQh .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-y0s6fkZqwitqNHQh .marker{fill:#333333;stroke:#333333;}#mermaid-svg-y0s6fkZqwitqNHQh .marker.cross{stroke:#333333;}#mermaid-svg-y0s6fkZqwitqNHQh svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-y0s6fkZqwitqNHQh .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-y0s6fkZqwitqNHQh .cluster-label text{fill:#333;}#mermaid-svg-y0s6fkZqwitqNHQh .cluster-label span{color:#333;}#mermaid-svg-y0s6fkZqwitqNHQh .label text,#mermaid-svg-y0s6fkZqwitqNHQh span{fill:#333;color:#333;}#mermaid-svg-y0s6fkZqwitqNHQh .node rect,#mermaid-svg-y0s6fkZqwitqNHQh .node circle,#mermaid-svg-y0s6fkZqwitqNHQh .node ellipse,#mermaid-svg-y0s6fkZqwitqNHQh .node polygon,#mermaid-svg-y0s6fkZqwitqNHQh .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-y0s6fkZqwitqNHQh .node .label{text-align:center;}#mermaid-svg-y0s6fkZqwitqNHQh .node.clickable{cursor:pointer;}#mermaid-svg-y0s6fkZqwitqNHQh .arrowheadPath{fill:#333333;}#mermaid-svg-y0s6fkZqwitqNHQh .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-y0s6fkZqwitqNHQh .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-y0s6fkZqwitqNHQh .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-y0s6fkZqwitqNHQh .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-y0s6fkZqwitqNHQh .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-y0s6fkZqwitqNHQh .cluster text{fill:#333;}#mermaid-svg-y0s6fkZqwitqNHQh .cluster span{color:#333;}#mermaid-svg-y0s6fkZqwitqNHQh div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-y0s6fkZqwitqNHQh :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 按位取反,加一 按位取反,加一 正数 负数 还是用1和-1举例子 这个过程之所以简单是因为它只需要两次基本的硬件操作一次按位取反操作和一次加法操作。这对于硬件设计来说是非常高效的因为它不需要额外的复杂逻辑来区分正数和负数的转换。
方便溢出处理
在补码系统中如果发生溢出结果将会被截断只保留最低的有效位。 这就是为什么1的补码加-1的补码结果为0。 这也意味着如果一个运算的结果超出了表示范围它将会被“环绕”回到可用的表示范围内 希望本篇文章对你有所帮助并激发你进一步探索C语言的兴趣 本人仅是个C语言初学者如果你有任何疑问或建议欢迎随时留言讨论让我们一起学习共同进步 #mermaid-svg-GfyROcHP8YXdrGZQ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GfyROcHP8YXdrGZQ .error-icon{fill:#552222;}#mermaid-svg-GfyROcHP8YXdrGZQ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-GfyROcHP8YXdrGZQ .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-GfyROcHP8YXdrGZQ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-GfyROcHP8YXdrGZQ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-GfyROcHP8YXdrGZQ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-GfyROcHP8YXdrGZQ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-GfyROcHP8YXdrGZQ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-GfyROcHP8YXdrGZQ .marker.cross{stroke:#333333;}#mermaid-svg-GfyROcHP8YXdrGZQ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-GfyROcHP8YXdrGZQ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-GfyROcHP8YXdrGZQ .cluster-label text{fill:#333;}#mermaid-svg-GfyROcHP8YXdrGZQ .cluster-label span{color:#333;}#mermaid-svg-GfyROcHP8YXdrGZQ .label text,#mermaid-svg-GfyROcHP8YXdrGZQ span{fill:#333;color:#333;}#mermaid-svg-GfyROcHP8YXdrGZQ .node rect,#mermaid-svg-GfyROcHP8YXdrGZQ .node circle,#mermaid-svg-GfyROcHP8YXdrGZQ .node ellipse,#mermaid-svg-GfyROcHP8YXdrGZQ .node polygon,#mermaid-svg-GfyROcHP8YXdrGZQ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-GfyROcHP8YXdrGZQ .node .label{text-align:center;}#mermaid-svg-GfyROcHP8YXdrGZQ .node.clickable{cursor:pointer;}#mermaid-svg-GfyROcHP8YXdrGZQ .arrowheadPath{fill:#333333;}#mermaid-svg-GfyROcHP8YXdrGZQ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-GfyROcHP8YXdrGZQ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-GfyROcHP8YXdrGZQ .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-GfyROcHP8YXdrGZQ .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-GfyROcHP8YXdrGZQ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-GfyROcHP8YXdrGZQ .cluster text{fill:#333;}#mermaid-svg-GfyROcHP8YXdrGZQ .cluster span{color:#333;}#mermaid-svg-GfyROcHP8YXdrGZQ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-GfyROcHP8YXdrGZQ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} #mermaid-svg-zmwbpa6fVY575Dyr {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-zmwbpa6fVY575Dyr .error-icon{fill:#552222;}#mermaid-svg-zmwbpa6fVY575Dyr .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-zmwbpa6fVY575Dyr .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-zmwbpa6fVY575Dyr .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-zmwbpa6fVY575Dyr .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-zmwbpa6fVY575Dyr .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-zmwbpa6fVY575Dyr .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-zmwbpa6fVY575Dyr .marker{fill:#333333;stroke:#333333;}#mermaid-svg-zmwbpa6fVY575Dyr .marker.cross{stroke:#333333;}#mermaid-svg-zmwbpa6fVY575Dyr svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-zmwbpa6fVY575Dyr .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-zmwbpa6fVY575Dyr .cluster-label text{fill:#333;}#mermaid-svg-zmwbpa6fVY575Dyr .cluster-label span{color:#333;}#mermaid-svg-zmwbpa6fVY575Dyr .label text,#mermaid-svg-zmwbpa6fVY575Dyr span{fill:#333;color:#333;}#mermaid-svg-zmwbpa6fVY575Dyr .node rect,#mermaid-svg-zmwbpa6fVY575Dyr .node circle,#mermaid-svg-zmwbpa6fVY575Dyr .node ellipse,#mermaid-svg-zmwbpa6fVY575Dyr .node polygon,#mermaid-svg-zmwbpa6fVY575Dyr .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-zmwbpa6fVY575Dyr .node .label{text-align:center;}#mermaid-svg-zmwbpa6fVY575Dyr .node.clickable{cursor:pointer;}#mermaid-svg-zmwbpa6fVY575Dyr .arrowheadPath{fill:#333333;}#mermaid-svg-zmwbpa6fVY575Dyr .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-zmwbpa6fVY575Dyr .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-zmwbpa6fVY575Dyr .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-zmwbpa6fVY575Dyr .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-zmwbpa6fVY575Dyr .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-zmwbpa6fVY575Dyr .cluster text{fill:#333;}#mermaid-svg-zmwbpa6fVY575Dyr .cluster span{color:#333;}#mermaid-svg-zmwbpa6fVY575Dyr div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-zmwbpa6fVY575Dyr :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}