C++Primer第五版第四章练习4.25

文章讨论了在32位系统中,使用Latin-1字符集和8位char时,对字符q进行位运算(~q<<6)的过程,解释了操作符优先级和补码规则,最终计算出结果-7296。

/*
练习4.25:
如果一台机器上int占32位、char占8位,用的是Latin-1字符集,其中字符'q'的二进制形式是01110001,那么表达式~'q'<<6的值是什么?
答:
位求反运算符~优先级较高,满足右结合律
移位运算符<<优先级较低,满足左结合律
q先提升,再取反:
前24位是1,后8位:10001110
取反后,左移6位,右侧加6个0:
11111111 11111111 11100011 10000000
{
    Latin-1字符集是单字节8位
    其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。
    Latin包含256个字符(0~255),其中0~127位的字符与ASCII码保持一致。
}
{
    在计算机系统中,数值,一律用补码表示和存放
    正整数的补码,与原码相同
    负整数的补码,将其原码除符号位外的所有位取反,后加1
    -5对应带符号位负数5(10000101)→除符号位外所有位取反(11111010)→加1为 (11111011)
所以-5的补码是11111011。
    补码求原码:
    1)如果补码的符号位为“0”,表示是一个正数,其原码就是补码。
    2)如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。
    例:已知一个补码为11111001,则原码是10000111(-7)。
解:因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”。
其余七位1111001取反后为0000110;再加1,所以是10000111。
}
11111111 11111111 11100011 10000000:符号位为1,表示一个负数,该位不变,其余取反:
10000000 00000000 00011100 01111111
再加1:
10000000 00000000 00011100 10000000
-7296
*/
#include "TouWenJian_4.h"

int main()
{

    return 0;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值