整形
整形包括(char int short long)
其中整形又包括有符号与无符号整形,其中有符号的写法可以为int 或者 signed int,包括了正负两种数字,unsigne char(0-255),char(-128-127)。
源码,数字直接用二进制表示的形式
例如1,由于1是整数,在C语言编译器中有4byte的存储空间 源码为00000000 00000000 00000000 00000001
例如-1,10000000 00000000 00000000 00000001.
举例char(-128~127)
十进制 | char类型下二进制补码 |
0 | 0000 0000 |
1 | 0000 0001 |
... | ... |
127 | 0111 1111 |
-128 | 1000 0000 |
-127 | 1000 0001 |
... | ... |
-1 | 1111 1111 |
0 | 0000 0000 |
十进制 | unsigned char类型下二进制补码 |
0 | 0000 0000 |
1 | 0000 0001 |
... | ... |
127 | 0111 1111 |
128 | 1000 0000 |
... | ... |
255 | 1111 1111 |
0 | 0 |
(使用for时,若定义了无符号整形时作为参数时,若最大值为变量最大值,会使for循环)
关于变量形式,char变量的内存为一个字节,并不代表char存储的-1的源码是10000001,是因为在引用char变量时,内存中保存的形式为补码,为11111111 111111111 111111111 11111111,取得该调用的内存,11111111 经过进行补码解析为源码同样是-1。(简单理解,1因为是一个整数,所以源码依然是32位,但如你是一个char变量,当为正数时,在内存中,0000000 00000000 00000000 xxxxxxxx,负数,11111111 111111111 111111111 xxxxxxx只取后8位,当char类型被整形提出来时,有符号的高位补符号位,无符号高位补0)
其中数据在内存中,是以补码的形式存在,正数原码反码补码都相同,负数的源码为一个符号位(1为负,0为正)与数据位保存,补码等于反码(源码保留符号位,数据位全部取反)+1bit。