社区
C语言
帖子详情
intel 面试题
sara0209
2008-09-07 02:09:39
1.在P4的机器上,下段代码的输出结果是什么:
#include <stdio.h>
struct{
int a:3;
int b:2;
int c:3;
}s;
void main(void)
{
char *p;
p=(char*)&s;
*p=0x99;
printf("%d\n",*p);
printf("%d,%d,%d",s.a,s.b,s.c);
}
学习中,能详细说明为什么吗?谢谢各位大虾!
...全文
345
14
打赏
收藏
intel 面试题
1.在P4的机器上,下段代码的输出结果是什么: #include struct{ int a:3; int b:2; int c:3; }s; void main(void) { char *p; p=(char*)&s; *p=0x99; printf("%d\n",*p); printf("%d,%d,%d",s.a,s.b,s.c); } 学习中,能详细说明为什么吗?谢谢各位大虾!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sara0209
2008-09-07
打赏
举报
回复
谢谢楼上!
_石头_
2008-09-07
打赏
举报
回复
00X99= 1001 1001
最高位为1----表示是符数,其余的位数取反+1就等于有效值
所以
1001 1001=-(1100110+1)=-1100111=-103
其实位域的算法也是这样,只是BIT位的数量是位域成员指定的宽度而已
sara0209
2008-09-07
打赏
举报
回复
再弱弱问句:-103怎么来的
fflush
2008-09-07
打赏
举报
回复
[Quote=引用 7 楼 baihacker 的回复:]
引用 6 楼 sara0209 的回复:
我运行出来是
-103
1 -1 -4
不懂~~~~
是不是要涉及类型转换哦
见我一楼说的...有符号是先左移再算术右移以保持符号
比如占两位,则先左移30位,这时候符号位就在最高位了,然后再算术右移30位,这个时候就会保持这个符号
11左移30位后由于最高位是1,然后算术右移,移了后由于最高位是1,所以再填充.于是结果就出来了.
100
001
同理.
[/Quote]
baihacker的解释很有意思,一般的逻辑应该是这样的,比方说s.c是100,但是编译器需要把这个值解释成一个int类型,而后者是32位的,所以要把s.c扩展到32位,对于这种扩展,计算机中有两种方式,即符号扩展和无符号扩展,符号扩展就是把需要扩展的位用符号位来填充,而无符号扩展就是用0来填充。int型当然是有符号的,这里做了一个符号扩展,所以s.c变为0xFFFFFFFC,即-4。
至于为什么会有符号扩展这种莫名其妙的方式,Lz可以看一下补码的表示方法,仔细研究之后你就会知道符号扩展是唯一正确的方式
_石头_
2008-09-07
打赏
举报
回复
有符号的,我是这样人为地------和常规类型的有符号数一样,只是bit位少些!
譬如:如果s的成员是int形
c b a
1 0 0 1 1 0 0 1
s.a=1;
s.b=-1
s.c=-4
分析,以s.c为列
s.c共3bit,所以它的-1的形式为 111,如果S.C不等于-1,那么 -1^S.C就等于的S.C绝对值
sara0209
2008-09-07
打赏
举报
回复
[Quote=引用 7 楼 baihacker 的回复:]
引用 6 楼 sara0209 的回复:
我运行出来是
-103
1 -1 -4
不懂~~~~
是不是要涉及类型转换哦
见我一楼说的...有符号是先左移再算术右移以保持符号
比如占两位,则先左移30位,这时候符号位就在最高位了,然后再算术右移30位,这个时候就会保持这个符号
11左移30位后由于最高位是1,然后算术右移,移了后由于最高位是1,所以再填充.于是结果就出来了.
100
001
同理.
[/Quote]
谢谢 我大概知道怎么回事了
_石头_
2008-09-07
打赏
举报
回复
高低地址弄反了
[Quote=引用 3 楼 CSYNYK 的回复:]
这是intel的面试题?----不会把?
按照内存格式排布一下就出来了啊!
c b a
1 0 0 1 1 0 0 1
s.a=1;
s.b=3
s.c=4
[/Quote]
这个是unsigned int 的结果
baihacker
2008-09-07
打赏
举报
回复
[Quote=引用 6 楼 sara0209 的回复:]
我运行出来是
-103
1 -1 -4
不懂~~~~
是不是要涉及类型转换哦
[/Quote]
见我一楼说的...有符号是先左移再算术右移以保持符号
比如占两位,则先左移30位,这时候符号位就在最高位了,然后再算术右移30位,这个时候就会保持这个符号
11左移30位后由于最高位是1,然后算术右移,移了后由于最高位是1,所以再填充.于是结果就出来了.
100
001
同理.
sara0209
2008-09-07
打赏
举报
回复
我运行出来是
-103
1 -1 -4
不懂~~~~
是不是要涉及类型转换哦
hyyuanqiang
2008-09-07
打赏
举报
回复
呵呵呵
intel不会考这么容易的题目吧???
_石头_
2008-09-07
打赏
举报
回复
噢!是int型的阿?那就好考虑符号!
_石头_
2008-09-07
打赏
举报
回复
这是intel的面试题?----不会把?
按照内存格式排布一下就出来了啊!
a b c
1 0 0 1 1 0 0 1
s.a=4;
s.b=3
s.c=1
过去的我
2008-09-07
打赏
举报
回复
intel没有笔试的,lz又在yy了
baihacker
2008-09-07
打赏
举报
回复
位域以及对于int位域中符号位的保留问题.
关键是符号位,如果不需要符号,只要一个右移,再一个&就OK
如果需要保留符号位,要先左移,再算术右移
Intel
面试题
集
Intel
面试题
集
Intel
面试题
集
Intel
面试题
集
程序员C/C++
面试题
汇总(
Intel
英特尔
面试题
.微软亚洲技术中心的
面试题
,Cisco思科
面试题
,华为C/C++笔试题,慧通
面试题
)
程序员C/C++
面试题
汇总
Intel
面试题
微软
面试题
Cisco思科
面试题
华为
面试题
C/C++笔试题 慧通
面试题
嵌入式八股文
面试题
库资料知识宝典-
Intel
面试题
.zip
嵌入式八股文
面试题
库资料知识宝典-
Intel
面试题
.zip
华为、微软、
intel
、德勤java
面试题
.pdf
华为、微软、
intel
、德勤java
面试题
.pdf 华为、微软、
intel
、德勤java
面试题
.pdf 华为、微软、
intel
、德勤java
面试题
.pdf 华为、微软、
intel
、德勤java
面试题
.pdf华为、微软、
intel
、德勤java
面试题
.pdf 华为、微软、
intel
、德勤java
面试题
.pdf华为、微软、
intel
、德勤java
面试题
.pdf 华为、微软、
intel
、德勤java
面试题
.pdf华为、微软、
intel
、德勤java
面试题
.pdf 华为、微软、
intel
、德勤java
面试题
.pdf华为、微软、
intel
、德勤java
面试题
.pdf 华为、微软、
intel
、德勤java
面试题
.pdf华为、微软、
intel
、德勤java
面试题
.pdf 华为、微软、
intel
、德勤java
面试题
.pdf华为、微软、
intel
、德勤java
面试题
.pdf 华为、微软、
intel
、德勤java
面试题
.pdf华为、微软、
intel
、德勤java
面试题
.pdf 华为、微软、
intel
、德勤java
面试题
.pdf华为、微软、
intel
、德勤java
面试题
.pdf 华为、微软、
intel
、德勤
Intel
笔试
面试题
本文档包含了较多的
Intel
笔试
面试题
,希望对大家有所帮助!
C语言
70,037
社区成员
243,243
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章