C语言程序设计(12)

116 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第12天,点击查看活动详情
整数

char:1字节(8比特)

short:2字节

int:取决于编译器(CPU),通常的意义是“一个字“(计算机字长)

long:取决于编译器(CPU),通常的意义是”一个字“

long long:8字节。

计算机字长:

image.png

字长是指寄存器的宽,同时也是总线的宽。(寄存器一次可以处理的数据、总线一次可以传输的数据),在C语言中体现为int的大小。总的来说,int就是用来表达寄存器的。

整数的内部表达

计算机内部一切都是二进制;

正数和零都用正常二进制表达,那么负数怎么表达?

二进制负数

一个字节可以表示的数:00000000-11111111(0-255)

三种表示负数的方案:

1.仿照十进制,有一个特殊的符号表示负数;

2.取中间的数为0,例10000000为0,比它小的是负数,比它大的是正数;(1,2过于复杂)

3.补码。

补码:

考虑-1,我们希望-1+1=0。如何能做到?

0->00000000

1->00000001

11111111 + 00000001 ->100000000

因为0-1=-1,所以,-1=(1)00000000-00000001->11111111

11111111被当作纯二进制看待时,是255,被当作补码看待时是-1。

同理,对于-a,其补码就是0-a,实际是(2^n)-a,n是这种类型的位数

补码的意义就是拿补码和原码可以加出一个溢出的”零“。