c语言-关于C语言无符号规格化的一个理解

问题描述

关于C语言无符号规格化的一个理解
看深入理解计算机系统里面。关于规格化的一段描述:
......也就是说,指数的值是E=e-Bias其中e是无符号数,其位表示为ek-1···e1e0而Bias是一个
等于2k-1 -1(单精度是127,双精度是1023)的偏置值。....

我知道C语言单精度的指数位是8位,取值范围是-126到127.但是我对E=e-Bias不理解。这里的e代表的是什么?本人小白求解释。。

解决方案

e就是你的指数值,给个例子

0100 0010 1**111 0110 0000 0000 0000 0000**

第一个粗体的0是符号位,后面的10000101 = 133(十进制),这个是个单精度数,bias=127所以指数是E - bias = 133 - 127 = 6
第二个粗体长串111 0110 0000 0000 0000 0000是你的小数部分.111011
这个数字的F = .111011 + 1 = 1.111011
这个的值 = 1.111011 x 2^6 = 1111011 = 123

这里之所以采用bias是因为指数从0~255,如何表示负数(小于1)的数,采用的是e - bias。(e大于127,是大于1,e小于127是小于1)。这样既可以表示大的数,也可以表示非常小的数(2的-128次方)。

解决方案二:
給你一個鏈接

时间: 2024-10-30 15:15:13

c语言-关于C语言无符号规格化的一个理解的相关文章

C语言参考程序—无符号一位整数的四则运算

题目:输入一个无符号的一位整数的四则运算表达式,输出其结果.例如输入:1+3*6-2,则输出:17 分析:因为不涉及到括号,只是简单的四则运算,我的想法是如果有乘除法先计算,没有的话就按照加减法从左到右的顺序进行计算.在开始的时候,首先检查是否有乘除法运算符,有的话就取出前后两个操作数进行计算,将结果保存起来.没有的话就将加减运算符先存起来. 主要过程: 1.输入的是一个四则运算的表达式,在计算机中按照字符串的形式存储.数据和运算符需要分开处理. 2.引入一个整型的数组,其大小为字符串长度加一,

c语言-有符号加法,无符号减法溢出处理的C程序,并运用条件编译指令。。

问题描述 有符号加法,无符号减法溢出处理的C程序,并运用条件编译指令.. 这是我们老师布置的实验题,请教大神.. 实验名称:跨系统的整型数据类型运算 实验目的:理解不同系统之间存在数据类型的不兼容,理解C语言中为不同系统设计统一数据类型头文件,比如stdint.h. 实验内容: 1.编码实现一个**.c 和**.h两个文件,这**.C中的函数可以让其它程序能过包含**.h引用."**"根据个人喜好命名. 2.只在小端的系统上运行程序: 3.在**.c中实现以下功能的函数, 函数1: i

C语言无符号长整型的左移运算

问题描述 C语言无符号长整型的左移运算 C语言(VC6.0)的无符号长整型是如何左移的,当左移的位数超过该数值类型的最大位数是怎么样处理的?求大神解答,不甚感激 解决方案 C语言左移运算符是<<,左移赋值运算符是<<= 左移运算根据您机器的位长,如32位.64位机器把long型数据转换成相应的二进制值.unsigned long不会转换为反码. //给您个例子32位机器 unsigned long lValue = 8L; //这时lValue的二进制制编码是00000000000

【 c语言中无符号和有符号的加法运算】【深入理解】--【sky原创】

原文:[ c语言中无符号和有符号的加法运算][深入理解]--[sky原创]   第一题 #include<stdio.h> int main() { unsigned int a=6; int b=-20; printf("%d\n",a+b); (a+b)>6? puts(">6"):puts("<=6"); return 0; }  答案是:>6   第二题 #include<stdio.h> 

C语言的无符号数据类型转换

从网络中读取C的无符号int,short,byte字节数组,相应转换成java的long,char,short short anUnsignedByte = 0; char anUnsignedShort = 0; long anUnsignedInt = 0; int firstByte = 0; int secondByte = 0; int thirdByte = 0; int fourthByte = 0; byte buf[] = getNetData();//如:读网络字节数据 in

C语言之将无符号字符型转化为ascii码值

这个宏是在linux内核中获取的,主要的功能是能够将一个无符号字符型的参数转化为ASCII码值. ASCII : ASCII 编码里包括了128个字符.用 十进制 0  到 127 来表示 .那就对了, 0 到 127 不就是 128个字符吗. 每一个数字都代表一个字符.看ASCII 编码表 我们来看看代码: #include <stdio.h> #include <stdlib.h> #define toascii(c) (((unsigned char)(c))&0x7

深入分析C语言中的有符号和无符号

就像我们必须决定某个量使用整数还是实数,使用多大的范围数一样,我们必须自已决定某个量是否需要正负.如果这个量不会有负值,那么我们可以定它为带正负的类型. 在计算机中,可以区分正负的类型,称为有符类型(signed),无正负的类型(只有正值),称为无符类型. (unsigned)数值类型分为整型或实型,其中整型又分为无符类型或有符类型,而实型则只有符类型. 字符类型也分为有符和无符类型. 比如有两个量,年龄和库存,我们可以定前者为无符的字符类型,后者定为有符的整数类型. 2.使用二制数中的最高位表

可用于数论计算的无符号大整数类

前些日子,无意中访问到三思科学网,里面介绍了许多数论问题,这也是我儿时的爱好,于是就利用空闲时间编写了一个用于数论计算的无符号大整数类. 一.类的基本结构Class CUSuperInt { public: //构造及析构函数 CUSuperInt(); CUSuperInt(DWORD dwValue); CUSuperInt(char* pszVal); CUSuperInt(CUSuperInt& x); virtual ~CUSuperInt(); protected: DWORD *p

Swift语言指南(三)--语言基础之整数和浮点数

原文:Swift语言指南(三)--语言基础之整数和浮点数   整数   整数指没有小数的整数,如42,-23.整数可以是有符号的(正数,零,负数),也可以是无符号的(正数,零). Swift提供了8,16,32,64位形式的有符号和无符号的整数,这些整数遵循与C语言相似的命名规则.如8位无符号整数的类型为UInt8,32位有符号整数的类型为Int32,和Swift语言的其它类型一样,这些整型命名以大写字母开头.   整数的边界 你可以通过min或max属性为每一个整数类型指定一个最小值或最大值: