首页 > 软件 > 这个程序的结果是多少

这个程序的结果是多少

软件 2022-08-19

这个程序的运行结果是多少?为什么?

main()
{
unsignedchara=0xA5;//无符号16进制数a5,二进制就是10100101
unsignedcharb=~a>>4+1;//先算术,后移位,最后位运算等价于b=~(a>>(4+1))
//b=~(a>>5)=~(00000101)=(11111010)
printf("%d",b);//输出格式为%d,为无符号数,按照补码(Two'scomplement)的原理
//11111010就是0xfa也就是250
getch();
}

我之前的答案是错的~按位取反为单目运算符号,优先级别最高,因此

计算优先级如下 b = (~a) >> (4+1) = (~a) >> 5

(~a) 这是个比较困扰人的地方,

如果你的编译环境中将char升为int处理的话,答案就是

(~ 0000 0000 1010 0101) = (1111 1111 0101 1010)

(~ a) >> 5 就是 0000 0111 1111 1010

但是的b也是unsigned char类型,所以赋值后b = 0000 0000 1111 1010 = 250(10进制)


如果你的编译环境是其他的时候,结果有可能就是

(~a) >> 5 = ( ~ 1010 0101)>>5 = (0101 1010)>>5 = (0000 0101)

b = (0000 0101) = 5


更新,我用GDB调试了下,发现了很奇怪的的东西,或许可以解释(~a)为什么会是32位额int形式,unsigned char在做(~a)升位成了32位

unsigned char a =0xa5;

char a2 = 0xa5;


在GDB里面设置断点,然后

p /x ~a

p /x ~a2

结果如下


GNU gdb (GDB) 7.6.1

Copyright (C) 2013 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law. Type "show copying"

and "show warranty" for details.

This GDB was configured as "mingw32".

For bug reporting instructions, please see:

<http://www.gnu.org/software/gdb/bugs/>...

Reading symbols from C:\Users\Komax\ds\test1.exe...done.

(gdb) l

1 #include

2

3

4 int main(){

5 unsigned char a = 0xa5;

6 char a2 =0xa5;

7 unsigned char b = ~a >> 4 + 1;

8 printf("%u\n", b);

9 printf("%x\n", b);

10 return 0;

(gdb) b 9

Breakpoint 1 at 0x40141b: file test1.c, line 9.

(gdb) r

Starting program: C:\Users\Komax\ds/test1.exe

[New Thread 3064.0x73c]

250


Breakpoint 1, main () at test1.c:9

9 printf("%x\n", b);

(gdb) p /x a

$1 = 0xa5

(gdb) p /x ~a

$2 = 0xffffff5a

(gdb) p /x ~a2

$3 = 0x5a

(gdb) p /x ~a2

$4 = 0x5a

(gdb)

这个程序的运算结果是什么?

答案: 104 倒数第二次执行n是13 s是90。然后执行n++,n=14,s=90+14=104。 另外一定要看判断条件,是s<=100而不是n<=100,所以答案绝对不会比100大不了多少。

C语言,这个程序的结果是多少,怎么算的?具体解释一下

首先a[0][0]到a[2][3]值分别为1,2,3,4,5,6. p=&a[0][0];就是*p为1 m=(*p)*(*(p+2))*(*(p+4));为1*3*5,答案为8. *(p+2)就是a[0][0]加上2就是a[0][2],是3,同样道理*(p+4)就是5.

C语言:这段程序的结果是多少?我想的这个过程对吗?

结果是8 应为声明x时候前面用了 static,静态声明,这个在执行时候会在内存中为x申请一快内存空间来保存x的值,所以每次fun()调用x时候,不会再重新创建x也不会初始化为1了。 简单说说大概就这样,具体static的用法还请楼主去看书。

这个C语言程序运行后结果是什么?

您好,很高兴回答您的问题。 这个程序的运行结果为a+b=7。 程序运行中,在主函数内部先定义整型变量a,b,然后分别给a,b赋初始值为3和4,最后输出a+b的值,所以结果为7.因为输出时要求格式为a+b=%d,所以最后的结果为a+b=7。

标签:编程 信息技术 CC++ 编程语言 C(编程语言)

大明白知识网 Copyright © 2020-2022 www.wangpan131.com. Some Rights Reserved. 京ICP备11019930号-18