C语言由位数截取的原因所引发的错误-创新互联
在聊二进制的位数截取之前呢我们需要先了解两个知识点,一是数字类型的不同所占的存储空间是不同的,进而导致每个数据类型所能存储的数据范围不同。二是编译过程中计算机原码,反码,补码的转换。
创新互联服务项目包括宁夏网站建设、宁夏网站制作、宁夏网页制作以及宁夏网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,宁夏网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到宁夏省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!一、常见数据类型的存储空间 1.整数类型1.1char:占用的内存空间:1字节 8bit;
能存储的数据范围:无符号:[0, 2^8-1],有符号:[-2^7, 2^7-1]
1.2short:占用的内存空间:2字节 16bit;
能存储的数据范围:无符号:[0, 2^16-1],有符号:[-2^15, 2^15-1]
1.3.int:占用的内存空间:4字节 32bit
能存储的数据范围:无符号:[0, 2^32-1],有符号:[-2^31, 2^31-1]
1.4.long:占用的内存空间:8字节 64bit
能存储的数据范围:无符号:[0, 2^64-1],有符号:[-2^63, 2^63-1]
2.浮点类型3.空类型浮点型存储涉及到小数的二进制,取得大部分都是近似值,本次不讨论。
二、原码、反码、补码转换的问题。 1.转化的规则void 叫做空类型,不占用内存空间,一般搭配指针使用,后续再说指针。
无符号数:原码、反码、补码 都是一样的
有符号的正数:原码、反码、补码 都是一样的
有符号的负数:反码==原码中符号位不变,其他位按位取反 0变成1 1变成0
2.存储时的不同三、实例演示存储时看数据(正负),取出时看类型(有无符号)
了解完这些问题,咱们通过一些例子去验证一下。
1.正常情况int main(int argc, const char *argv[])
{
unsigned char a = 10;
//存储时
//原码: 0000 1010
//反码: 0000 1010
//补码: 0000 1010
//取出时
//补码: 0000 1010
//反码: 0000 1010
//原码: 0000 1010 -->10
printf("a = %d\n", a);//10
signed char b = -10;
//存储时
//原码: 1000 1010
//反码: 1111 0101
//补码: 1111 0110
//取出时
//补码: 1111 0110
//反码: 1111 0101
//原码: 1000 1010 -->-10
printf("b = %d\n", b);//-10
2.错误情况signed char c = 129;
//存储时
//原码: 1000 0001
//反码: 1000 0001
//补码: 1000 0001
//取出时
//补码: 1000 0001
//反码: 1000 0000
//原码: 1111 1111 -->-127
printf("c = %d\n", c);// -127
unsigned char d = -1;
//存储时
//原码: 1000 0001
//反码: 1111 1110
//补码: 1111 1111
//取出时
//补码: 1111 1111
//反码: 1111 1111
//原码: 1111 1111 -->255
printf("d = %d\n", d);//255
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
分享文章:C语言由位数截取的原因所引发的错误-创新互联
转载源于:http://scyanting.com/article/dcgdgo.html