计算出90,-90的十六进制形式?char型数据在微机中存储值为0xc0,则printf以%d打印指为?

【1】计算机存储的基本单位

        在计算机中存储二进制的基本单位是1和0,即比特(bit),计算机中的基本数据存储单元:字节(byte)1byte = 8bit 。

运算关系: 1byte = 8bit        1Kb = 1024byte        1Mb = 1024 Kb

                   1Gb = 1024Mb   1Tb = 1024Gb          

        我们在电脑上看到的一切都是由1和0组成的,所以我们要搞清楚计算机存储90,-90,0xc0通过%d打出来的值是多少我们首先要了解源码,反码,补码的关系。

【2】源码反码补码

2.1 源码:人脑最能够直接是别人的二进制形式

        +2的源码: 0000 0010   -2的源码:1000 0010

2.2 反码:源码转补码的中间形式

       正数的反码=源码本身   +2 = 0000 0010(源码)=1000 0010(反码)

       负数的反码:符号位不变,数据为取反(0变1,1变0)-2=1000 0010(源码)= 1111 1101(反码)

2.3 补码:计算机中真正存在的二进制形式  

        正数的补码=源码=反码  +2 = 0000 0010(源码)= 0000 0010(反码)= 0000 0010(补码)

        负数的补码:在反码的基础上+1   -2 = 1000 0010(源码)= 1111 1101(源码)=1111 1110(补码)

【3】解题

3.1 计算90的16进制 ----  0X5A

90的二进制 = 0101 1010(源码)=0101 1010(反码)= 0101 1010(补码)

有2.3可知计算机中真正存在的二进制形式是补码,0101 1010 转换为16进制为

0X5A

3.2 计算-90的16进制---- 0XFFFFFFA6

求-90的16进制数,稍微有点转弯,-90是int类型,在32位系统中,占4个字节(byte),最高位为符号位,其余为数据位即可写出-90的二进制形式:

1000 0000 0000 0000 0000 0000 0101 1010(源码)

= 1111 1111 1111  1111 1111 1111 1010 0101(反码)

= 1111 1111 1111  1111 1111 1111 1010 0110 (补码)

 转换为二进制 = 0XFFFFFFA6

3.3 计算char型数据在微机中存储值为0XC0,则打印%d值为 -----  -64

这里有几个注意点

1.char在电脑中占一个字节的数据,即8位,unsigned char的取值范围0~255,signed char的取值范围是-128~127,题目中0XC0转换为2进制为192,已经超过char的取值范围。

2.计算机中真正存在的2进制形式是补码的形式,程序通过%d打印的是源码,而不是补码,题目中0XC0在计算机中存在的形式是补码,要知道%d的值,就要逆推出0XC0的源码形式

0XC0 = 192 = 1100 0000(补码) = 1011 1111(反码=补码 - 1)= 1100 0000(源码)

我们求出192的源码1100 0000,由于char类型只能存储8位,内存就取8位1100 0000,最高位是符号位,1为负,其余7为数据位为64,结果为-64

在程序中我们可以通过%#x打印16进制数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值