我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: 几个关于字符型变量和移位的问题 显示签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

老鼠尾巴




性别: 保密 状态: 该用户目前不在线
等级: *
发贴: *
威望: *
浮云: *
在线等级:
注册时间: *
最后登陆: *

5come5帮你背单词 [ neglect /ni'glekt/ vt. & n. 忽视,疏忽 ]


几个关于字符型变量和移位的问题

字符型变量是什么?在内存中是以什么形式存储的,补码,原码还是反码?其它类型的数据呢?为何一个字符型变量可以赋值成“0xb9“,“0x83”之类的形式?“0x0f”是什么,为何一个字符型变量做位逻辑运算时可以改变变量的高低4位?
当表达式为负数的时候,右移左端不是符号位不变,然后补1吗?
为何这段程序我觉得不对?
main()
{
int b=3, c=-72;
printf("%d\n%d\n" ,c>>b,c<<b);
}
给出的结果是-9
            -576
-72=(1000 0000 0100 1000)2吗?
左右移动三位怎么会是那个结果?
期待热心的蝈蝈解答!
顶端 Posted: 2007-04-01 19:20 | 美国 [楼 主]
老鼠尾巴




性别: 保密 状态: 该用户目前不在线
等级: *
发贴: *
威望: *
浮云: *
在线等级:
注册时间: *
最后登陆: *

5come5帮你背单词 [ speech /spi:t/ n. 言语,讲话,演讲 ]


Quote:
引用第1楼beggaren于2007-04-01 19:30发表的:
很显然,带符号数移位不移动符号位的

是不移动符号位啊?但是它补的也全都是1啊?
顶端 Posted: 2007-04-01 19:40 | 美国 [1 楼]
老鼠尾巴




性别: 保密 状态: 该用户目前不在线
等级: *
发贴: *
威望: *
浮云: *
在线等级:
注册时间: *
最后登陆: *

5come5帮你背单词 [ persuade /pə:'sweid/ vt. 说服,劝服 ]


Quote:
引用第3楼beggaren于2007-04-01 19:48发表的:
你迷糊啦,仔细想想就想通了.

书上说的是符号位不变,并向右复制相应位数,不是都补1吗?
另外,期待蝈蝈解答其他几个问题。
顶端 Posted: 2007-04-01 20:11 | 美国 [2 楼]
老鼠尾巴




性别: 保密 状态: 该用户目前不在线
等级: *
发贴: *
威望: *
浮云: *
在线等级:
注册时间: *
最后登陆: *

5come5帮你背单词 [ warm /wo:m/ a. 温暖的,暖和的,热情的,热心的,保暖的,御寒的;vt. (使)温暖 ]


Quote:
引用第5楼kangtalc于2007-04-01 21:04发表的:
字符型变量一般是用一个字节来存储,共8位,在内存中是以2进制来存储,字符都被赋予ascii码值,好像是从0-255,0xb9的意思是这是一个字节,共8位,以每4位用一个16进制的数表示,比如0xb9就是2进制的10111001,你看前4位1011是不是16进制的b,后4位1001是16进制的9,同样的,0x83也是一个字节,2进制为10000011,0x0f表示00001111,因为一个字符变量也是一个字节长度,以2进制存储共8位,所以一个字符型的变量可以赋为0xb9等值,比如你有一个字符型的变量char ch = 'A',它是用ascii码值65存储在内存中的,用2进制就为01000001,换成16进制(记住,每四位用一个16进制数表示)那就是0x41

懂了吧?另外,负数在内存中是以补码表示的
数字向左移一位表示乘以2,向右移一位表示除以2

谢谢蝈蝈咯
顶端 Posted: 2007-04-01 22:49 | 美国 [3 楼]
我来我网·5come5 Forum » 程序员之家

Total 0.009240(s) query 6, Time now is:11-23 19:26, Gzip enabled
Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号