C+ 高级语言程序设计的问题???

来源:百度知道 编辑:UC知道 时间:2024/06/09 11:12:24
麻烦会的人帮我解答一下以下几道题......谢谢了

有以下程序
main()
{
int x=102,y=012;
printf("%2d,%2d\n",x,y);
}
执行后输出结果是_____
A.10,01 B.02,12 C.102,10 D.02,10 我知道答案是C
请的懂的人说明一下为什么选择C

有以下程序
#include<stdio.h>
main()
{unsigned char a,b;
a=4|3;
b=4&3;
printf("%d%d\n",a,b);
}
执行后输出的结果是_____
A.7 0 B.0 7 C.1 1 D.43 0 答案是A
麻烦请说明为什么选择A

设有定义"char a=2,b=5;"求表达式" ~a^b<<2 "的值(假定现有计算机字长为16)
A.-32 B.32 C.-23 D.23 答案是C
最后我用二进制数转换成十进制数,可是答案不对
所以会的人请说明一下计算过程
第三到题为什么是-23 而不是23

1. x=102,y=012;x是十进制的,y是八进制的(12 十进制 012 八进制 0x12 十六进制 )
012(八进制)--->10(十进制)

2. | 按位或,& 按位或
4|3--->00000100|00000011 --->00000111-->7
4&3--->00000100&00000011 --->00000000-->0

3. ^ 异或运算 a=00000010, b=00000101
~a^b<<2---> (~a)^(b<<2)--->11111101^00010100-->11101001--->补码还原-23

1.虽然x,y都是整形,但是x是十进制的,而y是八进制的
2.|是按位或,&是按位或。

第一题
八进制:012 040 093 -01151 -0157 04663 -067756 051013 (在C/C++中,八进制开头要加0,来说明这个整数是八进制数)
十六进制:0xa 0x20 0x4b -0x269 0x6f 0x9b3 -0x6fee 0x520b(在C/C++中,十六进制开头要加0x,来说明这个整数是十六进制数)

第三题
& 按位与
| 按位或
^ 按位异或
1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。
按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。
main(){
int a=9,b=5,c;
c=a&b;