如何解决“&”如何用于打印进程退出代码的整数值?
我正在看一个教学示例,我看到我的教授使用这种语法来打印子进程的退出值:
wait(&value);
printf("last two bytes of value are %d - %d\n",(value>>8)&255,value&255);
“value”变量定义为一个int,父进程使用wait()来等待通过“fork()”生成的子进程。子进程可以通过信号终止,也可以在固定时间后自行终止。 据我所知,由于变量“value”是一个 int,它有 4 个字节,但“exit(int)”的退出代码只写在四个字节之一中。如果进程不是由 exit() 终止,而是由信号终止,则在这四个字节中的另一个字节中,我收到该信号的代码。 所以我想我有“(value>>8)”的事实是由于字节的这种使用,但我不明白的是为什么我使用带有“&255”的语法来打印这些值。>
解决方法
数字 255 在二进制中表示为 11111111
,在十六进制中表示为 FF
。用这个数字按位与将只留下 8 个最低位。较高的位将被清零。
此操作可能是不必要的,因为 wait()
的手册说明:
SYNOPSIS
void exit(int status);
DESCRIPTION
The exit() function causes normal process termination and
the value of status & 0xFF is returned to the parent (see wait(2)).
,
好的,所以有一些位操作正在进行:
假设您有 32 位整数:
0101 0101 1011 0101 1101 1010 1111 1101
1: (value>>8)&255
这将执行两个操作:向右移动 8 次,然后是“与”操作。换班后:
0000 0000 0101 0101 1011 0101 1101 1010
在“和”之后:
0000 0000 0000 0000 0000 0000 1101 1010。
这是最终结果的前八位的值。
-
value&255
:这将再次执行“和”,您有:
0000 0000 0000 0000 0000 0000 1111 1101
这是结果的最后 8 位。
TL:DR
value&255
将 32 位值的前 24 位清零。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。