C语言~取反关键字//~1不是0
先上码
#include <bits/stdc++.h>
using namespace std;int main() {char ch = 0;while(~scanf("%c", &ch)) //此位置分析
{getchar();//读入回车符if((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'))printf("YES\n");elseprintf("NO\n");}return 0;
}
今天遇到这样一段代码段
while(~scanf("%c", &ch)) //此位置分析
提出问题:
输入字符a的时候会结束while循环吗?
我们和计算机交流一下,
计算机:我的scanf在接收到a之后,返回1。
我:那你~1之后是0
计算机:你小子在开玩笑
我:不对吗?
计算机:二进制取反
我:你1,1的16进制储存为0x00000001?
计算器:对的,那我取反是多少?
我:0xfffffffe?
计算机:对了。
我:那如何让你~一个数之后变为0?
计算机:你试试-1
我:~(-1)之后是0了,莫非你-116进制是0xffffffff?
机器:对的
好,从刚才和机器的对话中我们了解到了,
1.~是以二进制取反来操作的,1中的二进制不是0xffffffff储存的,所以~1不等于0!
2.-1采用的是补码。
while(~scanf("%c", &ch)) //此位置分析
那么就可以理解这句话的意思了。
当scanf("%c", &ch)返回-1的时候结束,
scanf("%c", &ch)在==EOF的时候返回-1。
其他:
1.scanf函数的返回值
1.1例scanf("%d",&c1);//返回值为1
1.2例scanf("%d%d",&c1,&c2);//返回值为2
.....
//依次类推//返回值为n
1.other1 scanf 在什么情况下会输出0?
scanf输入错误的时候。
例子:
int a; scanf("%d",&a);//你给他赋值a字符,scanf未输入,返回值为0
1.other2 scanf 什么时候输出-1?
文件末尾的时候,==EOF的时候,具体,在输入框中 CTRL+Z,
在ENTER键
C语言~取反关键字//~1不是0相关推荐
- C语言----取反~
一.正数 (1)执行~0001后 为1110(内存中就是这样存储0001取反的结果的) 这个结果是以补码的方式存储的 但是真真的显示的时候往往用原码,就是1010了<最高位为符号位,这里为1,就 ...
- C语言 ~ 取反操作
由于负数的原码,补码,反码不同 在使⽤~计算负数时,由于在计算机中,负数的补码,反码,原码不同,因此⾸先将操作数的值计算为补码,再进⾏取反运算 反码->补码->取反 正数(正数的补码,反码 ...
- c51单片机c语言取反运算符,单片机c语言教程:C51运算符和表达式
在制作电路前我们先来看看要用的 MAX232,这里不去具体讨论它,只要知道它是 TTL和 RS232 电平相互转换的芯片和基本的引脚接线功能就行了.通常我会用两个小功率晶体管加少量的电路去替换MAX2 ...
- C语言位运算符:与、或、异或、取反、左移和右移
C语言位运算符主要包括六种:与( & ).或( | ).异或( ^ ).取反( ~ ).左移( >> )和右移( << ) 运算符 含义 描述 & 按位与 如果 ...
- 计算机的取反(~)操作解释
我们都知道取反~操作是将二进制0和1互换,但是计算时容易出错,这是由于计算机中数值是以二进制补码形式存储的. 补码:正数的补码和原码相同:负数的补码为符号位不变,剩余位取反再加1. 一定要时刻记住补码 ...
- Python——~取反操作
~取反操作 >>>~1 -2 >>>~-1 0 ~:求补码,即将原数(十进制)取相反数再减一.
- Verilog逻辑取反与按位取反
Verilog中逻辑取反(取非)用 !,按位取反用~. 取非 ! 表示运算结果只有0(假)与1(真)两种情况: 取反~表示二进制数按位取反. 例如对in=1101分别进行逻辑取反与按位取反: assi ...
- 【STM32】位操作、按位与、按位或、按位异或、取反、左移、右移等基础 C 语言知识补充
文章目录 1 位操作 1.1 按位与 1.2 按位或 1.3 按位异或 1.4 取反 1.5 左移 1.6 右移 2 单片机中常用操作 2.1 不改变其他位时,对某几个位设定值 2.2 移位操作提高代 ...
- C语言优先级——取反和移位
遇到一个面试题: unsigned char a=0xA5; unsigned char b=~a>>4; 结果是245,提示的是先提升类型然后移位,然后取反,然后截断. 但是单目运算符的 ...
最新文章
- 整理了一些t-sql技巧
- iOS常用宏定义大全
- 荷兰国旗 Flag of the Kingdom of the Netherlands
- 【C语言】while后接分号“ ;”的用法
- linux修改mysql配置文件_Linux下PHP开发环境搭建(Apache2.4+PHP7.1+MySQL5.7)
- 无法定位程序输入点 _ZdaPvj 于动态链接库 libstdc++-6.dll
- SAP UI5 extension component loads standard component
- 在Docker中运行asp.net core 跨平台应用程序
- 远程桌面 Web 连接
- 李迟2022年2月知识总结
- 阶段1 语言基础+高级_1-2 -面向对象和封装_11使用对象类型作为方法的返回值
- docker安装mysql主从视频教程_docker安装mysql主从
- AI 芯片崛起!FPGA 工程师的核心竞争力在哪里?
- Dijstra--讲解
- Python-split()函数的使用
- win10等系统安装Pads安装步骤及软件卡死问题解决
- RDPWrap,win10家庭版最新配置文件支持termsrv10.0.18362.836
- 移动办公系统现状分析
- 开关稳压器详解(四)-Buck降压型开关稳压器自举电路
- 做了个网页版的 五笔跟打器: 玫枫跟打器