C语言4 -C语言整数和浮点数

C语言4 -C语言整数和浮点数

C语言数据类型

基本类型

整数类型

char、short、int、long

char    8BIT    1字节     0~0xFF
short   16BIT   2字节     0~0xFFFF
int     32BIT   4字节     0~0xFFFFFFFF
long    32BIT   4字节     0~0xFFFFFFFF

特别说明:
int 在16位计算机中与short宽度一样,在32位以上的计算机中与long相同

存储格式
char x = 1;         //0000 0001  0x01
char x = -1;        //1111 1111 0xFF
(反码、补码、源码规则存储)
数据溢出
char x = 0xFF;      //1111 1111
char Y = 0X100;     //0001 0000 0000 (char最多8位 此处溢出了)

数据溢出,是吧高位舍弃还是低位舍弃?

经过实验,发现直接丢弃高位

有符号数与无符号数(signed、unsigned)
  1. 什么时候使用有符号数 无符号数

    sinned char x = ;   //0000 0000  0到127、-128到-1
    
    printf("&u \n",x); 按无符号数输出打印
    printf("&d \n",x); 按有符号数输出打印
    
    unsinned char x = ;   //0000 0000  0到255 
    
  2. 有符号数与无符号数的区别

    • 正确理解有符号数与无符号数
    • 扩展时与比较时才有区别

    扩展

    signed char x = -1; //0xFF 1111 1111
    int y =x; // 1111 1111 1111 1111 1111 1111 1111 1111 0xFFFF FFFF
    
    signed char x = 127; //0x7F 0111 1111
    int y =x; // 0000 0000 0000 0000 0000 0000 0111 1111 0xFFFF FFFF
    
    unsigned char x = -1;   // 0xFF 1111 1111
    int y = x; // 0000 0000 0000 0000 0000 0000 1110 1111 0x0000 00FF  
    

    比较

    unsigned char x = -1; //0xFF
    unsigned char y = 1;  //0X01
    if(x > y)
    {
        printf("x>y \n");  //成立
    }
    
    char x = -1;        //0XFF
    char y = 1;         //0X01
    if(x > y)
    {
        printf("x>y \n");  //不成立
    }
    

浮点类型

声明方式
float           4字节
double          8字节
long double     8字节(某些平台的编译器可能是16个字节)

赋值:
float x = 1.23;
double d = 2.34;
long double d = 2.34;

建议:
float x = 1.23F;
double d = 2.34;
long double d = 2.34L;
浮点类型的存储格式

float和double在存储方式上都是村从 IEEE 编码规范的

image
十进制整数转二进制

8.25转成浮点存储:整数部分

image

总结:
所有的整数一定可以完整转换成2进制

8.25转成浮点存储:小数部分

image

总结:
用二进制描述小数,不可能做到完全精确
就好比用10进制来表示1/3也不可能完全精确是一个道理。

将一个float型转化为内存存储格式的步骤为:
  1. 先将这个实数的绝对值化为二进制格式
  2. 将这个二进制格式的实数的小数点左移或者右移N位,直到小数点移动到第一个有效数字的右边
  3. 从小数点右边第一位开始数出二十三位数字放入第22到第0位
  4. 如果实数是正的,则第31位放入“0”,否则放入 “1”
  5. 如果n是左移得到的,说明指数是正的,第30位放入“1”,如果n是右移得到的或n=0,则第30位放入“0”
  6. 如果n是左移得到的,则n减去1后化为二进制,并在左边加“0”补足七位,放入第29到第23位
  7. 如果n是右移得到的或n=0,则将n化为二进制后在左边加“0”补足七位,再各位求反,再放入第29到第23位

麻痹太复杂了

8.25 -> 100.01  -> 1.00001 * 2的三次方(指数是3)


科学计数法

10      =   1 * 10一次方      指数:1
100     =   1 * 10的二次方    指数:2
1000    =   1 * 10的三次方    指数:3   

填充表格(flot)
符号位(1)  指数部分(8)     尾数部分(23)
0         10000010       000 0100 0000 0000 0000 0000

16进制表示: 0x4104 0000

尾数部分:经过第一步转换后 8.25等于  
1.00001 * 2的三次方(指数是3)
尾数直接从前往后放所以尾数是:
000 0100 0000 0000 0000 0000

指数部分:
首位表示小数点移动方向
向左移动则为1,向右为0

指数部分简单方法:
不论左移还是右移。一律吧指数 +127 然后取2进制

左移了三次,指数为3,3的二进制是11, 但是这里要减去1(不知道为啥??)

所以指数部分为 1000 0010
```

练习:
将0.25转换为内存中存储的二进制数

(简单方法,不管指数是正数还是负数,一律加127 转换二进制填进去。。)
```
0.25 = 1 * 2的-2次方  指数为-2 指数 加 127 = 125 = 01111101

尾数 都是0
所以是小数点向右移动 所以指数首位为0
向右移动两位  所以 指数剩下的为 10,这里要减去1 所以为1
结果:

0 10000001 000 0000 0000 0000 0000 0000
0 01111101 000

```

##### 浮点类型的精度

float和double的精度是由尾数的位数来决定的
float : 2^23 = 8388608 一共7位,这意味着最多能有7位有效数字;
double : 2^52 = 4503599627370496 一共16位,这意味着最多能用16位有效数字;



©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容