<>数据在整数中的存储

1.源码,反码,补码
首先我们先了解一下原码,反码,补码的概念:
计算机中的有符号数有三种表示方法,即原码、反码和补码。
三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位三种表示方法各不相同。
原码:
直接将二进制按照正负数的形式翻译成二进制就可以。

反码:
将原码的符号位不变,其他位依次按位取反就可以得到了。

补码:
反码 + 1得到补码
注意:最高位为符号位,正数的原、反、补码都相同。
对于整形来说:数据存放内存中其实存放的是补码。
int main() { int a = 20; //00000000000000000000000000010100-源码,反码,补码 //换成十六进制序列
//0x000014 int b = -10; //10000000000000000000000000000000-源码
//11111111111111111111111111110101-反码 //11111111111111111111111111110110-补码
//fffffff6 return 0; }

a的内存

b的内存

我们可以看到内存中的确存放的是补码,关于内存中的顺序问题我们会在后面讲到。

<>字节序

大小端介绍:
大端字节序存储 模式,是指数据的低位字节保存在内存的高地址中,而数据的高位,保存在内存的低地址中;

小端字节序存储 模式,是指数据的低位字节保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。
练习题
判断该电脑的字节序
int main() { int a = 1; char *p = (char*)&a; if (*p == 1) { printf("小端"); }
else { printf("大端"); } return 0;
以整型的方式打印下列数
int main() { char a = -1; //1000000000000000000000000000001-源码
//1111111111111111111111111111110-反码 //1111111111111111111111111111111-补码
//11111111-a //又以整型的方式打印,整型提升,按符号位补1 //1111111111111111111111111111111
//1111111111111111111111111111110 //1000000000000000000000000000001 //-1 signed
char b = -1; unsigned char c = -1; //11111111-c //对无符号位整型提升,高位补0
//0000000000000000000000011111111 printf("%d %d %d", a, b, c); return 0; }
注意:无符号整数源反补也相同。

代数相加
int main() { int i = -20; unsigned int j = 10;
//10000000000000000000000000010100-补码 //11111111111111111111111111101011-反码
//11111111111111111111111111101100-源码 //00000000000000000000000000001010
//11111111111111111111111111110110//i+j //11111111111111111111111111110101//反码
//10000000000000000000000000001010 printf("%d", i + j); return 0; } int main() {
char a = -128; //1000000000000000000000010000000
//1111111111111111111111101111111 //1111111111111111111111110000000 //10000000-a
//%u-无符号整数 //1111111111111111111111110000000-补码 // //%u无符号整型 printf("%u\n", a);
return 0; } #include<stdio.h> int main() { char a[1000]; int i; for(i=0; i<1000;
i++) { a[i] = -1-i; } printf("%d",strlen(a)); return 0; }

技术
友情链接
码工具
Toolsou
API参考文档
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:766591547
关注微信