整数的表示虽然只能编码一个相对较小的数值范围,但是这种表示是精确的
浮点数虽然可以编码一个较大的数值范围,但是这种表示只是近似的
信息存储大多数计算机使用8位的块,或者字节(byte),作为最小的可寻址的内存单位
机器级程序将内存视为一个非常大的字节数组,称为虚拟内存。内存的每个字节都有一个唯一的数字来表示,称为它的地址,所有可能地址的集合就称为虚拟地址空间
C语言中一个指针的值是某个存储块的第一个字节的虚拟地址。
每个程序对象可以简单地是为一个字节块,而程序本身就是一个字节序列
十六进制十进制转十六进制
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MkU5RxDX-1652024912871)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220426172212323.png)]
十六进制转十进制
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ICmIPGHZ-1652024912872)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220426172227859.png)]
字数据大小字长:每个字所包含的位数
字长决定虚拟空间的最大大小,对于一个字长为w位的机器而言,虚拟地址的范围为:0~2的w次方-1,程序最多访问2的w次方个字节
我们将程序称为32位程序或64位程序,区别在于该程序是如何编译的,而不是器运行的机器类型
32位机器与64位机器表示的就是虚拟地址空间,大多数64位机器也可以运行32位机器编译的程序,这是一种向后兼容
1kb=1024字节
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h6bAfXIt-1652024912873)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220426173715881.png)]
char也能用来存储整数值
大多数数据类型编码默认为有符号型
寻址和字节顺序在几乎所有的机器上,多字节对象都被存储为连续的字节序列,对象的地址为所使用字节中最小的地址
表示字符串C语言中字符串被编码为一个null(其值为0)字符结尾的字符数组。终止字节的十六进制表示为0x00
位级运算确定一个位级表达式的结果最好的方法,就是将十六进制的参数扩展成二进制表示并执行二进制运算,然后再转换回十六进制
移位运算 左移x< x>>k 逻辑右移:在左端补k个0 算术右移:在左端补k个最高有效位的值 几乎所有的编译器/机器组合都对有符号数使用算术右移 对于无符号数,右移必须是逻辑的 原码就是机器码。 为什么存在补码:希望只有一个0 最高有效位位符号位,符号位被设置为1时,表示值为负,设置为0时,表示值为非负 对于补码0001:十进制为1 对于补码1111:(-1*2的三次方+1 * 2的平方+1 * 2的一次方+1 * 2的零次方= -1 补码=反码+1 正数的反码是其本身。 原码、反码、补码之间的相互关系 - xfcao - 博客园 (cnblogs.com) 强制类型转换的结果保持位置不变 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9LaQ0PiM-1652024912874)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503164840210.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1BPEPKgu-1652024912875)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503165040147.png)] 创建一个无符号常量,必须加上后缀字符‘U’或‘u’ 当执行一个运算时,如果它的一个运算数是有符号的而另一个是无符号的,那么C语言会隐式的将有符号参数强制类型转换为无符号数,并假设这两个数都是非负的,来执行这个运算 一个常见的运算是在不同字长的整数之间转换,同时又保持数值不变 要将一个无符号数转换为一个更大的数据类型,我们只要简单地在表示的开头添加0,这种运算被称为零扩展 要将一个补码数字转换为一个更大的数据类型,可以执行一个符号扩展,在表示中添加最高有效位的值 符号扩展保持数值不变 补码截断要将最高位转换为符号位 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g2dBcZig-1652024912876)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503165834029.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AbPCtUcl-1652024912877)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503165958869.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ByjiLTmw-1652024912878)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503170055949.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AT3MdKh8-1652024912878)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503170134374.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-incofbjk-1652024912879)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503170225549.png)] 对于两个w位的无符号数,无符号数乘积的取值范围可能需要2w位来表示,不过C语言中的无符号乘法被定义为产生w位的值,就是2w位的整数乘积的低w位表示的值 相当于截断 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hhHZ7Q4w-1652024912880)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503170510735.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CMwpLJ6Y-1652024912881)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503170927417.png)] 在右边增加k个0 除以2的幂也可以用移位运算来实现,只不过我们用的是右移而不是左移,无符号和补码数分别使用逻辑移位和算术移位来达到目的 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XDGuEV6w-1652024912882)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503171600949.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kUjtuN56-1652024912883)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503171825978.png)] 不加修正为向下舍入,加修正为向上舍入 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-noEOUsbl-1652024912884)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503171718349.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uiWpYDLN-1652024912884)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503172026426.png)] 二进制小数点向左移动一位相当于这个数被2除 二进制小数点向右移动一位相当于将该数乘2 小数的二进制表示法只能表示那些能够被写成x乘2的y次方的数,其他的值只能被近似地表示 增加二进制表示地长度可以提高表示的精度 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z8W8yq2U-1652024912885)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503172814393.png)] 定义1/-0将产生负无穷 定义1/+0将产生正无穷 浮点加法不具有结合性 从float或者double转换成int,值将会向0舍入,1.999将被转换成1,-1.999将被转换成-1 大多数机器对浮点数使用IEEE标准754编码,但C语言中没有明确的标准 欢迎分享,转载请注明来源:内存溢出
1的原码是0000 0001,-1的原码是1000 0001
负数的反码是其原码除符号位以外其余各位按位取反。-5的反码是1111 1010。
评论列表(0条)