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

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

老鼠尾巴




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

5come5帮你背单词 [ presence /'prezns/ 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 | 美国 [楼 主]
beggaren



性别: 帅哥 状态: 该用户目前不在线
等级: 品行端正
发贴: 304
威望: 0
浮云: 1133
在线等级:
注册时间: 2005-10-23
最后登陆: 2007-06-25

5come5帮你背单词 [ magnet /'mægnit/ n. 磁体,吸引人的人或物 ]


很显然,带符号数移位不移动符号位的
顶端 Posted: 2007-04-01 19:30 | [1 楼]
老鼠尾巴




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

5come5帮你背单词 [ bomb /bom/ n. 炸弹,高压喷雾器;vt. 投弹,轰炸 ]


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

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



性别: 帅哥 状态: 该用户目前不在线
等级: 品行端正
发贴: 304
威望: 0
浮云: 1133
在线等级:
注册时间: 2005-10-23
最后登陆: 2007-06-25

5come5帮你背单词 [ shoe /u:/ n. 鞋 ]


你迷糊啦,仔细想想就想通了.
顶端 Posted: 2007-04-01 19:48 | [3 楼]
老鼠尾巴




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

5come5帮你背单词 [ optimistic /optimistik/ a. 乐观的,乐观主义的 ]


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

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



性别: 帅哥 状态: 该用户目前不在线
头衔: 揍敌客·奇犽
等级: 希望之光
家族: 万人坑恋影部落
发贴: 1723
威望: 5
浮云: 1113
在线等级:
注册时间: 2005-09-21
最后登陆: 2008-06-29

5come5帮你背单词 [ great /greit/ a. 大的,巨大的,伟大的,重大的 ]


字符型变量一般是用一个字节来存储,共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


[ 此贴被kangtalc在2007-04-01 21:09重新编辑 ]
顶端 Posted: 2007-04-01 21:04 | [5 楼]
老鼠尾巴




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

5come5帮你背单词 [ infer /in'fə:/ 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 | 美国 [6 楼]
我来我网·5come5 Forum » 程序员之家

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