关于c语言 关于C语言:

\u5173\u4e8eC\u8bed\u8a00\u4e2d || \u548c &&\u7684\u7528\u6cd5

\u533a\u522b\uff1a
1.\u8fd0\u7b97\u7b26\u6027\u8d28\u4e0d\u540c\u3002
&\u662f\u4e00\u4e2a\u4f4d\u8fd0\u7b97\u7b26\u3002
&&\u662f\u4e00\u4e2a\u903b\u8f91\u8fd0\u7b97\u7b26\u3002
2.\u4f5c\u7528\u4e0d\u540c\u3002
&\u662f\u5c06\u4e24\u4e2a\u4e8c\u8fdb\u5236\u7684\u6570\u9010\u4f4d\u76f8\u4e0e\uff0c\u7ed3\u679c\u662f\u76f8\u4e0e\u4e4b\u540e\u7684\u7ed3\u679c\u3002
&&\u5c31\u662f\u5224\u65ad\u4e24\u4e2a\u8868\u8fbe\u5f0f\u7684\u771f\u5047\u6027\uff0c\u53ea\u6709\u4e24\u4e2a\u8868\u8fbe\u5f0f\u540c\u65f6\u4e3a\u771f\u624d\u4e3a\u771f\uff0c\u6709\u4e00\u4e2a\u4e3a\u5047\u5219\u4e3a\u5047\uff0c\u5177\u6709\u77ed\u8def\u6027\u8d28\u3002
3.\u7528\u9014\u9650\u5236\u3002
&\u9664\u4e86\u662f\u4e00\u4e2a\u4f4d\u8fd0\u7b97\u7b26\uff0c\u4e5f\u662f\u53d6\u5730\u5740\u7b26\u3002
&&\u5c31\u662f\u4e00\u4e2a\u5355\u7eaf\u7684\u903b\u8f91\u8fd0\u7b97\u7b26\uff0c\u6ca1\u6709\u4efb\u4f55\u5176\u4ed6\u542b\u4e49\u3002

\u53c2\u8003\u8d44\u6599&-\u767e\u5ea6\u767e\u79d1
&&-\u767e\u5ea6\u767e\u79d1

浮点数在内存里怎么可能是这样存放的。。。。
参考IEEE的浮点数标准。
IEEE制定的浮点数格式

鉴於有人问到在 C 语言中 float 和 double 型态的储存格式的问题, 所以我就在这边献丑一翻, 讲讲我所了解的部份, 如
有任何错误, 请各位大哥多多指教...

IEEE 制定之浮点数格式说明:

float 型态: 用 4 个 bytes 储存, 也就是 32 bits.
各个 bit 的用途如下:

bit 31 23~30 0~22
┌———┬————┬———————┐
│正负号│ 指数 │ 底数 │
└———┴————┴———————┘

double 型态: 用 8 个 bytes 储存, 也就是 64 bits.
各个 bit 的用途如下:

bit 63 52~62 0~51
┌———┬————┬———————┐
│正负号│ 指数 │ 底数 │
└———┴————┴———————┘

< 说明 > 正负号 (sign): 1 为负, 0 为正.

指数 (exponential): 将底数乘上 2 的指数次方后就是原来的数.
须注意的是: float 时, 因有 8 bits, 所以能表示的有 2 的
256 次方, 但因为指数应可正可负, 所以 IEEE 规定, 此处算
出的次方须减去 127 才是真的指数,所以 float 的指数可从
-126 到 128.
同理, double 型态有 11 bits, 算出的值须减去 1023, 所以
相关帖子>>>:备下(0字)sinos[5次]2008-7-23 10:12:57IEEE 浮点数格式[详解](5336字)zzwj5120[23次]2008-7-21 22:03:57IEEE 浮点数格式

IEEE 754 标准规定了三种浮点数格式:单精度、双精度、扩展精度。《编程卓越之道》第一部的 4.2 节对这些浮点数格式已
进行了详细的讲解,为了让读书笔记更像读书笔记,本文只道出个人的一些理解以及一些疑惑之处。

IEEE 浮点数标准的由来
话说 Intel 计划给最早的 8086 增加浮点运算单元 (FPU) 时,他们请来了最好的数值分析专家来为 8087 FPU 设计浮点数格
式,这位专家接着又请来了该领域的另外两位专家,这三个人 (Kahn, coonan 与 Stone) 设计了 Intel 的浮点格式,即
KCS 浮点数标准。这个标准实在太出色了,因此 IEEE 组织将 KCS 选作为 IEEE 浮点数格式的基础,即 IEEE 标准 754。

单精度浮点数
IEEE 754 标准所定义的单精度浮点数的长度为 32 位,按位域可划分为:符号位、阶码位与尾数位,如下:

31----------------------22---------------------------------------------------------0
| | |
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
| |-------------------| |----------------------------------------------------------|
符号 阶码 尾数符号位取 0 表示正数,取 1 表示负数。

阶码位是 8 位,这里有一点小门道需要注意,那就是的指数 n 并不能直接当作阶码来处理,需要将其与 127 (0x7f) 相加才
可得到 的阶码表示。

尾数的位域长度在图示中是 23 位,但实际上却是 24 位,这个位是“不可见”的,其值固定为 1,这也就是说 IEEE 754 标
准所定义的浮点数,其有效数字是介于 1 与 2 之间的小数。

可以尝试写一下 1.0 这个数的二进制单精度浮点格式,这有助于更好地理解单精度浮点数格式的位域分布。

1.0 的二进制单精度浮点格式:0 0111 1111 000 0000 0000 0000 0000 0000值得注意的一个问题是:书上说之所以要将指数
加上 127 来得到阶码,是为了简化浮点数的比较运算,这一点我没有体会出来。但是通过 127 这个偏移量 (移码),可以区
分出指数的正负。阶码为 127 时表示指数为 0;阶码小于 127 时表示负指数;阶码大于 127 时表示正指数。

第二个值得思考的问题是:使用 24 位尾数,大概可以得到 个十进制数字的精度,其中的“半个”数字由 FPU 的好意而产
生的一个随机数字,这个数字通常接近 5 (四舍五入?)。

第三个问题是我经常要碰到的:IEEE 754 标准所定义的单精度浮点数所表示的数的范围是多少?书上给出的答案是大约为
或者大约 。这个比较好理解,因为尾数的最大值是接近 2,而指数的范围是 [-127, 127],那么这个范围就可以表示为。

双精度浮点数
相对于单精度浮点数格式,双精度的阶码变为 11 位,移码变为为 1,023,尾数变为 53 位 (包含那个固定为 1 的隐含位)。
这样,再加上符号位,双精度浮点数的长度为 64 位,提供了大约 的动态范围以及 个数字的精度。

扩展精度浮点数
为了追求更高的浮点运算精度,Intel 又搞出来扩展精度格式。扩展精度的浮点数长度为 80 个位,相对于双精度浮点数所多
出来的 16 个位,有 12 位加入到尾数位中,有 4 位加入到阶码位中。

据说 Intel IA32 架构的的 FPU都是采用扩展精度浮点数进行运算的。当程序调入单、双精度浮点数时,FPU 将它们转为扩展
精度,运算结束后再将结果转成 (四舍五入) 对应的单、双精度浮点数。

浮点数在内存里怎么可能是这样存放的。。。。
参考IEEE的浮点数标准。
IEEE制定的浮点数格式

鉴於有人问到在 C 语言中 float 和 double 型态的储存格式的问题, 所以我就在这边献丑一翻, 讲讲我所了解的部份, 如
有任何错误, 请各位大哥多多指教...

IEEE 制定之浮点数格式说明:

float 型态: 用 4 个 bytes 储存, 也就是 32 bits.
各个 bit 的用途如下:

bit 31 23~30 0~22
┌———┬————┬———————┐
│正负号│ 指数 │ 底数 │
└———┴————┴———————┘

double 型态: 用 8 个 bytes 储存, 也就是 64 bits.
各个 bit 的用途如下:

bit 63 52~62 0~51
┌———┬————┬———————┐
│正负号│ 指数 │ 底数 │
└———┴————┴———————┘

< 说明 > 正负号 (sign): 1 为负, 0 为正.

指数 (exponential): 将底数乘上 2 的指数次方后就是原来的数.
须注意的是: float 时, 因有 8 bits, 所以能表示的有 2 的
256 次方, 但因为指数应可正可负, 所以 IEEE 规定, 此处算
出的次方须减去 127 才是真的指数,所以 float 的指数可从
-126 到 128.
同理, double 型态有 11 bits, 算出的值须减去 1023, 所以
相关帖子>>>:备下(0字)sinos[5次]2008-7-23 10:12:57IEEE 浮点数格式[详解](5336字)zzwj5120[23次]2008-7-21 22:03:57IEEE 浮点数格式

IEEE 754 标准规定了三种浮点数格式:单精度、双精度、扩展精度。《编程卓越之道》第一部的 4.2 节对这些浮点数格式已
进行了详细的讲解,为了让读书笔记更像读书笔记,本文只道出个人的一些理解以及一些疑惑之处。

IEEE 浮点数标准的由来
话说 Intel 计划给最早的 8086 增加浮点运算单元 (FPU) 时,他们请来了最好的数值分析专家来为 8087 FPU 设计浮点数格
式,这位专家接着又请来了该领域的另外两位专家,这三个人 (Kahn, coonan 与 Stone) 设计了 Intel 的浮点格式,即
KCS 浮点数标准。这个标准实在太出色了,因此 IEEE 组织将 KCS 选作为 IEEE 浮点数格式的基础,即 IEEE 标准 754。

单精度浮点数
IEEE 754 标准所定义的单精度浮点数的长度为 32 位,按位域可划分为:符号位、阶码位与尾数位,如下:

31----------------------22---------------------------------------------------------0
| | |
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
| |-------------------| |----------------------------------------------------------|
符号 阶码 尾数符号位取 0 表示正数,取 1 表示负数。

阶码位是 8 位,这里有一点小门道需要注意,那就是的指数 n 并不能直接当作阶码来处理,需要将其与 127 (0x7f) 相加才
可得到 的阶码表示。

尾数的位域长度在图示中是 23 位,但实际上却是 24 位,这个位是“不可见”的,其值固定为 1,这也就是说 IEEE 754 标
准所定义的浮点数,其有效数字是介于 1 与 2 之间的小数。

可以尝试写一下 1.0 这个数的二进制单精度浮点格式,这有助于更好地理解单精度浮点数格式的位域分布。

1.0 的二进制单精度浮点格式:0 0111 1111 000 0000 0000 0000 0000 0000值得注意的一个问题是:书上说之所以要将指数
加上 127 来得到阶码,是为了简化浮点数的比较运算,这一点我没有体会出来。但是通过 127 这个偏移量 (移码),可以区
分出指数的正负。阶码为 127 时表示指数为 0;阶码小于 127 时表示负指数;阶码大于 127 时表示正指数。

第二个值得思考的问题是:使用 24 位尾数,大概可以得到 个十进制数字的精度,其中的“半个”数字由 FPU 的好意而产
生的一个随机数字,这个数字通常接近 5 (四舍五入?)。

第三个问题是我经常要碰到的:IEEE 754 标准所定义的单精度浮点数所表示的数的范围是多少?书上给出的答案是大约为
或者大约 。这个比较好理解,因为尾数的最大值是接近 2,而指数的范围是 [-127, 127],那么这个范围就可以表示为。

双精度浮点数
相对于单精度浮点数格式,双精度的阶码变为 11 位,移码变为为 1,023,尾数变为 53 位 (包含那个固定为 1 的隐含位)。
这样,再加上符号位,双精度浮点数的长度为 64 位,提供了大约 的动态范围以及 个数字的精度。

扩展精度浮点数
为了追求更高的浮点运算精度,Intel 又搞出来扩展精度格式。扩展精度的浮点数长度为 80 个位,相对于双精度浮点数所多
出来的 16 个位,有 12 位加入到尾数位中,有 4 位加入到阶码位中。



  • 浠ヤ笅鍏充簬C璇█鐨勬弿杩版纭殑鏄()銆
    绛旓細A. auto enum include 閿欙紝include涓嶆槸 B switch typedef continue 姝g‘C signed union scanf 閿欙紝scanf涓嶆槸 D if struct type 閿欙紝type涓嶆槸 鎵浠ワ紝绛旀閫塀 闄C璇█32涓叧閿瓧 鏁版嵁瀹氫箟鏈夊叧锛20锛夛細char double float int long shortunsigned signedvoid union struct enumauto extern regist...
  • 浠ヤ笅鍏充簬C璇█鐨勫彊杩版纭殑鏄?
    绛旓細绛旀鏄疌銆傚悇绛旀瑙f瀽锛欰 鏈夊弻寮曞彿锛屾槸瀛楃涓 B 鍗曞紩鍙烽噷鍙兘涓涓瓧绗 D \0琛ㄦ槑鏄8杩涘埗锛屽彧鑳藉嚭鐜0--7鐨勬暟瀛 E 涔﹀啓涓嶅畬鏁达紝鍙冲崐杈圭殑鍗曞紩鍙锋病浜 鎷撳睍锛氬湪C璇█涓紝涓涓瓧绗﹀父閲忎唬琛ˋSCII瀛楃闆嗕腑鐨勪竴涓瓧绗︼紝鍦ㄧ▼搴忎腑鐢ㄥ崟寮曞彿鎶婁竴涓狝SCII瀛楃闆嗕腑鐨勫瓧绗︽嫭璧锋潵浣滀负瀛楃甯搁噺銆傚瓧绗﹀父閲忓湪鍐呭瓨涓崰4...
  • 鍏充簬C璇█,涓嬪垪璇存硶涓纭殑鏈()銆
    绛旓細C璇█涓湁鏄庣‘瑙勫畾锛屽畯瀹氫箟鏄埄鐢#define鍛戒护锛岀敤涓涓寚瀹氱殑鏍囪瘑浠f浛涓涓瓧绗︿覆銆傚搴斿埌棰樼洰涓婂氨鏄#define 鏍囪瘑绗 瀛楃涓诧紝鎵浠I鏄爣璇嗙锛3.1415926鏄瓧绗︿覆銆傛墍浠ヨ繖棰橀塀 鍏充簬C閫夐」锛屽鏋3.1415926涓嶅湪瀹忓嚱鏁板畾涔変腑锛岄偅涔堝畠灏辨槸涓涓父閲忥紝鍙槸鍥犱负瀹冨湪#define鍛戒护涓紝鎵浠ュ畠鏄竴涓瓧绗︿覆銆侫閫夐」...
  • C璇█鐨勫叧閿瓧閮芥湁鍝簺?
    绛旓細C璇█鐨勫叧閿瓧鍏辨湁32涓紝鏍规嵁鍏抽敭瀛楃殑浣滅敤锛屽彲鍒嗗叾涓烘暟鎹被鍨嬪叧閿瓧銆佹帶鍒惰鍙ュ叧閿瓧銆佸瓨鍌ㄧ被鍨嬪叧閿瓧鍜屽叾瀹冨叧閿瓧鍥涚被銆1銆鍏充簬鏁版嵁绫诲瀷鐨勫叧閿瓧(12涓)(1) char 锛氬0鏄庡瓧绗﹀瀷鍙橀噺鎴栧嚱鏁 (2) double 锛氬0鏄庡弻绮惧害鍙橀噺鎴栧嚱鏁 (3) enum 锛氬0鏄庢灇涓剧被鍨 (4) float锛氬0鏄庢诞鐐瑰瀷鍙橀噺鎴栧嚱鏁 (5) int...
  • 澶у鐢熷嚑澶х紪绋璇█浣犻兘浼氬摢鍑犵?
    绛旓細C璇█璇炵敓浜1972骞,鍙互绉颁箣涓虹幇浠i珮绾ц瑷鐨勯蓟绁,鐢辫憲鍚嶇殑璐濆皵瀹為獙瀹ゅ彂鏄庛侰璇█鏄汉浠拷姹傜粨鏋勫寲,妯″潡鍖,楂樻晥鐜囩殑鈥滆瑷涔嬭姳鈥濄傚湪搴曞眰缂栫▼,姣斿宓屽叆寮,鐥呮瘨寮鍙戠瓑搴旂敤,鍙互鏇夸唬姹囩紪璇█鏉ュ紑鍙戠郴缁熺▼搴,鍦ㄩ珮灞傚簲鐢,涔熷彲浠ュ紑鍙戜粠鎿嶄綔绯荤粺(UNIX/LINUX/WINDOWS閮藉熀浜嶤璇█寮鍙) 鍒板悇绉嶅簲鐢ㄨ蒋浠躲 浜孋++璇█ 浣滀负C璇█...
  • 瀛︿範C璇█闇瑕佹帉鎻″摢浜涘熀鏈煡璇?
    绛旓細閭d箞,鎴戜滑濡備綍瀛﹀ソ銆奀绋嬪簭璁捐銆嬪憿? 涓.瀛﹀ソC璇█鐨勮繍绠楃鍜岃繍绠楅『搴 杩欐槸瀛﹀ソ銆奀绋嬪簭璁捐銆嬬殑鍩虹,C璇█鐨勮繍绠楅潪甯哥伒娲,鍔熻兘鍗佸垎涓板瘜,杩愮畻绉嶇被杩滃浜庡叾瀹冪▼搴忚璁¤瑷銆傚湪琛ㄨ揪寮忔柟闈㈣緝鍏跺畠绋嬪簭璇█鏇翠负绠娲,濡傝嚜鍔犮佽嚜鍑忋侀楀彿杩愮畻鍜屼笁鐩繍绠椾娇琛ㄨ揪寮忔洿涓虹畝鍗,浣嗗垵瀛﹁呭線寰浼氳鐨勮繖绉嶈〃杈惧紡闅捐,鍏抽敭鍘熷洜灏辨槸瀵...
  • 浠涔堟槸C璇█?
    绛旓細鍏抽敭瀛楁槸鐢C璇█瑙勫畾鐨勫叿鏈夌壒瀹氭剰涔夌殑瀛楃涓,閫氬父涔熺О涓轰繚鐣欏瓧銆傜敤鎴峰畾涔夌殑鏍囪瘑绗︿笉搴斾笌鍏抽敭瀛楃浉鍚屻侰璇█鐨勫叧閿瓧鍒嗕负浠ヤ笅鍑犵被: (1)绫诲瀷璇存槑绗 鐢ㄤ簬瀹氫箟銆佽鏄庡彉閲忋佸嚱鏁版垨鍏跺畠鏁版嵁缁撴瀯鐨勭被鍨嬨傚鍓嶉潰渚嬮涓敤鍒扮殑int,double绛 (2)璇彞瀹氫箟绗 鐢ㄤ簬琛ㄧず涓涓鍙ョ殑鍔熻兘銆傚渚1.3涓敤鍒扮殑if else灏辨槸鏉′欢璇彞鐨...
  • 濡備綍瀛﹀ソC璇█?
    绛旓細銆C璇█鍙傝冩墜鍐屻嬪氨鏄奀 Reference Manual銆,鏄疌璇█鏍囧噯鐨勮缁嗘弿杩,鍖呮嫭缁濆ぇ澶氭暟C鏍囧噯搴撳嚱鏁扮殑缁嗚妭,绠楀緱涓婃槸鏈濂界殑鏍囧噯C璇█鐨勫伐鍏蜂功銆傞『渚挎彁涓鍙,鏈鏂扮殑銆奀绋嬪簭璁捐璇█銆嬫槸鏍规嵁C89鏍囧噯淇鐨,鑰屻奀璇█鍙傝冩墜鍐屻嬫弿杩扮殑鏄疌99鏍囧噯,浜岃呭彲鑳戒細鏈変簺鍑哄叆,寤鸿鎸夌収C99鏍囧噯瀛︿範銆傝繕鏈変竴鏈奀鍜屾寚閽堛,鍐欏緱涔熸槸...
  • 浠ヤ笅鍏充簬C璇█鐨勮娉曟纭殑鏄?
    绛旓細C鍙互娌℃湁瀛愮▼搴)[15]B(include銆乻canf銆乼ype涓嶆槸C鍏抽敭瀛楋紝娉ㄦ剰鍏抽敭瀛楀惈涔夛紝瑙佺櫨搴︾櫨绉戔C璇█鍏抽敭瀛椻)[16]C[17]A[18]A(涓ユ牸鏉ヨ娌℃湁姝g‘绛旀銆俰nt鍙兘鏄2瀛楄妭锛屼篃鍙兘鏄4瀛楄妭锛岃繖鍜屽叿浣撶幆澧冩湁鍏筹紝鍗砳nt鍜宭ong鐨勫叧绯诲簲璇ユ槸int<=long)[19]C(鎶(a=2,b=5,b++,a+b)鐪嬪仛涓涓〃杈惧紡锛...
  • 浠ヤ笅鍏充簬C璇█鐨勬弿杩,鍝簺鏄纭殑?
    绛旓細C璇█瑙勫畾锛岃嫢鏈鍑芥暟杩斿洖绫诲瀷鍔犱互璇存槑锛屽垯鍑芥暟鐨勯殣鍚被鍨嬩负锛圔锛堿. char B. int C. void D. double 宸叉湁瀹氫箟char a[] = "xyz", b[]={ 'x', 'y', 'z' } 浠ヤ笅鍙欒堪姝g‘鐨勬槸 c a. 鏁扮粍a 鐨勫瓨鍌ㄧ┖闂撮暱搴﹀皬浜庢暟缁刡 鐨勫瓨鍌ㄧ┖闂撮暱搴 b. 鏁扮粍a 鍜宐 鐨勫瓨鍌ㄧ┖闂撮暱搴︾浉鍚 c. 鏁扮粍a 鐨...
  • 扩展阅读:c语言代码生成器 ... c语言简单问题及答案 ... 关于c语言的讨论问题 ... 初学者c语言 ... 新手入门c语言 ... c语言自学免费网站 ... c语言常用单词大全 ... c语言基础知识点总结 ... c语言进阶书籍 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网