C语言,数据在内存中的存储

本文详细介绍了C语言中整形数据类型(如int,char,short,long)的区别,包括有符号与无符号的表示方法,以及如何在内存中以补码形式存储数字,特别提到正数和负数的源码差异以及补码的作用。
摘要由CSDN通过智能技术生成

整形

整形包括(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类型下二进制补码
00000 0000
10000 0001
 ......
127

0111 1111

-1281000 0000
-1271000 0001
......
-11111 1111
00000 0000

                    

十进制unsigned char类型下二进制补码
00000 0000
10000 0001
 ......
127

0111 1111

1281000 0000
......
2551111 1111
00

(使用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。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值