首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当给定3的位掩码时,为什么printf()打印21而不是11?

当给定3的位掩码时,printf()打印21而不是11的原因是因为位掩码是一种用于对二进制数据进行位操作的技术。在这种情况下,给定的位掩码是3,其二进制表示为11。

printf()函数是用于格式化输出的函数,当我们使用%d格式化符号来打印一个整数时,它会将该整数转换为十进制并输出。

在位掩码的情况下,我们可以使用按位与运算符(&)来检查给定的位是否被设置为1。当我们将位掩码3与整数21进行按位与运算时,结果为1。这是因为21的二进制表示为10101,而3的二进制表示为11。按位与运算会将对应位置上的位进行比较,只有当两个位都为1时,结果才为1,否则为0。

因此,当我们使用printf()函数打印21时,它会将21转换为十进制并输出,结果为21。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

STM32之CAN通信

(Remote Transfer Request,RTR); 标准帧ID11,即范围是0x000~0x7FF,扩展帧ID是11+18=29;在CAN协议中,ID决定报文优先级高低,也决定这拓扑结构节点是否接收此...隐性信号,表示帧结束; CAN总线网络中有多个CAN节点设备,某一CAN设备发出数据帧,总线上所有设备(无过滤)都获取该数据帧中仲裁段中ID,如果是自己关注ID数据,则获取数据段内容,完成数据传输...由图 6.1.2 可知,bxCAN挂在APB1总线上,系统时钟为最高72MHz,APB1钟最高为36MHz。...首先设置筛选器组0处于32掩码模式,ID为0x0,掩码为0x7FC,结果将筛选出0x0-0x3。接着设置筛选器组1处于32列表模式,列表两个ID分别设为0x04和0x05。...由于CAN协议中包含有ID, RS485不存在ID。因此,RS485转CAN,模块会自动加上0x00ID,CAN转RS485,RS485只会收到数据部分,扔掉ID部分。

1.6K10

【Linux】进程控制

新进程为子进程,原进程为父进程。...写拷贝 通常,父子代码共享,父子不写入时,数据也是共享任意一方试图写入,便以写拷贝方式各自一份副本。...进程PCB里面有退出信号和退出码,进程退出,会释放代码和数据,但是PCB会保存一段时间,该进程变成Z(僵尸)状态。父进程就可以从子进程PCB中拿到退出信息。...结果打印并且换行了。 上面是不带\n。结果打印了但没换行。 上面是不带\n_exit使用。结果什么也没打印。...waitpid有三个参数,pid,即第一个参数为-1,等待任意一个子进程,与wait等效。 第一个参数pid>0,就会等待其进程ID与pid相等子进程 。

10510
  • 【Linux】进程控制

    拷贝 我们知道,父进程创建子进程后,操作系统会将父进程 pcb、进程地址空间、页表等拷贝一份给子进程;那么子进程想要修改数据时候,我们知道会发生写拷贝,那么操作系统怎么会知道什么时候进行写入拷贝呢...另外一个问题,操作系统进行写拷贝为什么要进行拷贝呢?直接将数据写入不就好了吗?原因是因为我们可能不需要修改这个数据所有内容,可能只需要修改一部分内容! 3....退出码当中,0 代表成功,但是退出码为非 0 时候,"我们"需要关心它是为什么失败,这个"我们"指的是父进程;所以这时候就应该有不同数字表明不同原因,比如 1 代表某种失败原因,2 也代表另一种失败原因...10,下面我们观察 status 返回结果: 如上图,为什么退出信息不是 10 呢?...问题2 我们上面执行单进程和多进程代码中,都没有看见结果打印 exec 之后 printf 语句,这是为什么呢?

    13010

    说明子网和子网掩码概念_子网掩码和子网地址

    网际地址分解成两个域后,带来了一个重要优点:IP数据包从网际上一个网络到达另一个网络,选择路径可以基于网络不是主机。...在大型网际中,这一点优势特别明显,因为路由表中只存储网络信息不是主机信息,这样可以大大简化路由表。...如对于一个C类地址,它用21来标识网络号,要将其划分为2个子网则需要占用1原来主机标识。此时网络号变为22为主机标示变为7。...因为但当地址 所有主机位都为”0″,这一地址为线路(或子 网)地址,所有主机位都为”1″为广播地址。   同时我们还可以使用可变长掩码(VLSM)就是指一个网络可以用不同掩码进行配置。...这样做目的是为了使把一个网络划分成多个子网更加方便。在没有VLSM情况下,一个网络只能使用一种子网掩码,这就限制了在给定子网数目条件下主机数目。

    58300

    【Linux】基础IO ——文件(上)

    预备知识 文件= 内容+属性 对应文件操作,对内容操作,对属性操作 文件没有被操作时候,一般在磁盘中 对文件进行操作时候,一般在内存中,因为冯诺依曼体系规定 当我们对文件进行操作时候...fp流中 fprintf int fprintf(FILE *stream, const char *format, ...); 指定文件流,向文件打印 指定文件流fp,fp打开文件为log.txt...系统怎么做 操作系统存在系统调用接口 int YYY (int flag),flag作为一个整数,有32个比特,可以用一个比特表示一个标志 ,一个int 就可以同时传递至少32个标记 此时flag...0000 0000 将最后四个比特通过宏方式分别记录下来 再与flag 按与 ,若为真,则说明传递flag 是 这4个比特其中一个 ---- 执行可执行程序,此时分别打印出了 one...umask 不是系统umask ---- 修改myfile.c文件内容 #include #include #include

    72710

    嵌入式经典面试题

    精确地说就是,优化器在用到这个变量必须每次都小心地重新读取这个变量值,不是使用保存在寄存器里备份。下面是volatile变量几个例子: 1)....嵌入式系统总是要用户对变量或寄存器进行操作。给定一个整型变量a,写两段代码,第一个设置abit 3,第二个清除a bit 3。在以上两个操作中,要保持其它不变。...提出这些问题,我希望更多看到应试者应付问题方法,不是答案。...答案:4 1 -1 -4 ffffffff 因为0x99在内存中表示为 100 11 001 , a = 001, b = 11, c = 100(在vc环境中,一般是由右到左进行分配c为有符合数...:   有些信息在存储,并不需要占用一个完整字节,只需占几个或一个二进制

    1.5K31

    【Linux】Linux进程控制 --- 进程创建、终止、等待、替换、shell派生子进程理解…

    ,调用exit,程序运行会先睡眠3秒,然后在打印出hello Linux,这是为什么呢?...exec系列函数只有在调用失败时候才有返回值,这个返回值是-1,那为什么exec系列函数没有调用成功返回值呢?...v是指vector,指的是该函数可以将所有的执行参数放到数组里面,统一进行传参,不是使用可变参数列表方式,来一个一个传执行参数。 4....3.shell内建/内置命令(shell自己执行命令,不是派生子进程进行程序替换来执行) 1....这也就能解释为什么echo能够打印本地变量了,我们之前将echo理解为一个可执行程序,也就是shell子进程,但是我们说子进程只能继承父进程环境变量,不能继承本地变量,所以当时就陷入echo为什么能够打印出本地变量疑问当中

    14.7K30

    TCPIP 相关总结

    网际地址分解成两个域后,带来了一个重要优点:IP数据包从网际上一个网络到达另一个网络,选择路径可以基于网络不是主机。...在大型网际中,这一点优势特别明显,因为路由表中只存储网络信息不是主机信息,这样可以大大简化路由表。...**因为但当地址所有主机位都为"0",这一地址为线路(或子网)地址,所有主机位都为"1"为广播地址**(255)。...在没有VLSM情况下,一个网络只能使用一种子网掩码,这就限制了在给定子网数目条件下主机数目。...(3本网络所有主机收到该ARP数据包,首先检查数据包中IP地址是否是自己IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机IP和MAC地址写入到ARP列表中,如果已经存在

    38510

    【Linux】 拿下 系统 基础文件操作!!!

    17 return 0 18 } 来看效果: 每个文件都有对应不同fd值(类似进程 pid),为什么是从3开始呢,因为0 1 2 ,都是已经设置好文件: 0 : 标准输入...怎么权限还是不对,我们设置是666应该是rw-rw-rw-啊???这是因为创建文件会收到文件掩码影响: 所以会出现这样情况,那怎么解决呢?...我们再来看看 flag 标志,它是一个32整数,每个比特代表一个对应功能(OS常用系统调用接口常用方法),也就是位图!!!...通过不同标识可以做到不同功能(比如追加写入) read 我们先创建一个文件: 1 #include 2 #include 3 #include...所以语言层文件操作函数,本质底层是对系统调用封装!通过不同标志封装来体现w r a+等不同打开类型! 我们在使用文件操作,一般都要使用语言层系统调用,来保证代码可移植性。

    9700

    LINUX常用100条命令总结【四】

    2 root hr 6 4月 17 21:09 mytestdir/mydir2/ 11.4 umask 功能:设定权限掩码 语法: umask [参数] [权限掩码] 参数: -S 以文字方式来表示权限掩码...语法: w [参数] 参数: -h/--no-header 不打印头信息 -u/--no-current 显示当前进程和cpu时间忽略用户名 -s/--short 使用短输出格式 -f/--from...显示用户从哪登录 -o/--old-style 老式输出 -i/--ip-addr 显示IP地址不是主机名(如果可能) 实例: 显示目前登入系统用户信息 [root@localhost ~]# w...输出 语法: printf [格式控制字符串] [参数] 参数: \a 警告字符,通常为ASCIIBEL字符 \n 换行 \r 回车 \0ddd 表示1到3八进制值字符 \ddd 表示1到3数八进制值字符...语法: kill [参数] [进程号] 参数: -l 列出系统支持信号 -s 指定向进程发送信号 -a 处理当前进程不限制命令名和进程号对应关系 -p 指定kill命令只打印相关进程进程号,不发送任何信号

    1.1K51

    【C语言进阶】内存中浮点数存储规则

    如图所示: 对于64浮点数,最高1是符号S, 接着11是指数E,剩下52为有效数字M。...所以IEEE 754规定,存入内存E真实值必须再加上一个中间数,对于8E,这个中间数是 127; 对于11E,这个中间数是 1023 。...因为n是个 int类型所以我们输出是以整形格式取出然后以%d十进制方式打印 printf(“*pFloat值为:%f\n”, *pFloat); 这个输出为什么是0.000000呢?...S=0 E=0 M= 0…1010 这里就是指数E为0时候 套用浮点数计算公式 V = (-1)^S * M * 2^E 我们拿出是一个无限接近0一个小数 %f只打印6个零就不打印了所以我们打印是...: 0.000000 *pFloat = 9.0; printf(“num值为:%d\n”, n); 这个打印为什么是1091567616 这段代码第一句话向指针指向地址存进去了一个浮点数

    21010

    【驱动】串口驱动分析(四)-串口编程和调试方法

    CSTOPB 设置两个停止不是一个。 CREAD 打开接受者。 PARENB  允许输出产生奇偶信息以及输入奇偶校验。 PARODD 输入和输出是奇校验。...IXOFF  启用输入 XON/XOFF 流控制。 IMAXBEL (不属于 POSIX) 输入队列满响零。Linux 没有实现这一,总是将它视为已设置。...OCRNL   将输出中回车映射为新行符 ONOCR 不在第 0 列输出回车。 ONLRET 不输出回车。 OFILL 发送填充字符作为延时,不是使用定时来延时。...NLDLY   新行延时掩码。取值为 NL0 和 NL1。 CRDLY   回车延时掩码。取值为 CR0, CR1, CR2, 或 CR3。 TABDLY  水平跳格延时掩码。...重新开始被 Stop 字符中止输出。设置 IXON 可被识别,不再作为输入传递。 VSTOP   (023, DC3, Ctrl-S) 停止字符。停止输出,直到键入 Start 字符。

    25410

    深度剖析数据在内存中存储

    如果a地地址是0x11223344,那么将11这个高位字节放在低地址处就是大端字节序存储,将44这个低位字节放在低地址处就是小端字节序存储。 为什么有大端和小端: 为什么会有大小端模式之分呢?...return 0; }  首先我们计算出-128补码,%u 是10进制形式,打印无符号整数,所以认为最高位不是符号。...详细解读: 根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式: (-1)^S * M * 2^E (-1)^S表示符号S=0,V为正数;S=1...IEEE 754规定,在计算机内部保存M,默认这个数第一总是1,因此可以被舍去,只保存后面的 xxxxxx部分。比如保存1.01 候,只保存01,等到读取时候,再把第一1加上去。...但是,我们 知道,科学计数法中E是可以出 现负数,所以IEEE 754规定,存入内存E真实值必须再加上一个中间数,对于8E,这个中间数 是127;对于11E,这个中间 数是1023

    16510

    C语言一些小细节

    如:printf("%d",printf("Hello world")); 这串代码就会在你屏幕上打印一个Hello world11,因为这串字符一共有10个字母,1个空格,共11个字符。...3..指针变量大小 指针变量大小并不是固定为什么呢?...首先我们得明白,指针变量功能是存放数据地址,地址大小又跟我们处理器挂钩,如果我们是64处理器,那么在存放地址时候,我们就会使用64个比特来存放,因此这时指针变量大小便是8个字节,同理可得...    printf("3\n");     case 4:     printf("4\n"); } 我们要实现应该a如果为1,则在屏幕上打印1,为2则在屏幕上打印2......现在由于没有了...break这个关键函数,a为1,程序并不会如我们所愿只打印出1,它会打印出1(换行)2(换行)3(换行)4(换行)这样东西。

    8210

    开篇:预备知识-3

    即(01000001)前面补齐了 24 个 0 (int 类型占用 32 二进制储存空间,给定二进制符号位数不足 32 ,会在左边用 0 补齐剩下位数)。...这个结果和 float 小节中得到运算结果是一致3). 特殊值 浮点数中 exp 部分值全为 1(11111111) 。此时值有以下 2 种情况: [1]....可以看到,和之前直接打印出 a 结果一样。这说明浮点数编码规则是没错,那为什么不精确呢?...很显然,这个结果并不是我们想要为什么两个正数做加法得到结果会是负数?...这是计算机中运算和数学中一个很大不同地方,数学是理论,我们在草稿纸上计算,如果有进位,我们就在左边加一,这是没有空间限制(只要你草稿纸足够大)。 计算机是应用。

    65320

    IP地址和CIDR

    A类地址用来表示网络ID第一必须以0开始,其他7可以是任意值, 其他7全为0是网络ID最小,即为0;其他7全为1网络ID最大,即为127。...B类地址用来表示网络ID前两必须以10开始,其他14可以是任 意值,其他14全为0是网络ID最小,即为128;其他14全为1网络ID最大,第一个字节数最大,即为191。...C类地址用来表示网络ID前三必须以110开始,其他22可以是任 意值,其他22全为0是网络ID最小,IP地址第一个字节为192;其他22全为1网络ID最大,第一个字节数最大,即为223...比如,网络中包含2000台计算机,只需要用11表示 主机ID,用21表网络ID,则子网掩码表示为11111111.11111111.11100000.00000000,转换为十进制则为 255.255.224.0...注意:为什么计算IP地址要减2,计算子网数目不减2呢?IP地址减2原因是主机ID不能全为0也不能全为1;子网就不存在这个问题。

    5.9K21

    程序员C语言快速上手——基础篇(五)

    ='\0'; i++){ 18 printf("%c",convchar(str[i])); 19 } 20 21 return 0; 22 } 打印结果: 1HELLO 我们自己编写...需要注意,函数返回值和形式参数都是可选有返回值,必须配合return语句返回,函数没有返回值,应当使用void关键字声明,注意我措辞,是应当,不是必须!...d\n",t); 14 return 0; 15 } 打印结果: 1 count=10 2 t=0 如上示例中,counter函数为一个计数函数,每次调用都将传入值加10,可是为什么在函数外部打印...每个小格子都存放这个32整数中8个。 理解了内存原理,那么我们就会明白,为什么几乎所有的编程语言中都指明字符串是不可变对象。...1 //指针应在声明同时初始化为NULL 2 int *ptr = NULL; 3 4 //注意,ptr才是指针变量,不是*ptr,切记!

    92120
    领券