在c语言中:表达式0x14&0x18的值是0x10是怎么得来的

来源:百度知道 编辑:UC知道 时间:2024/06/14 11:37:34
1.在c语言中:表达式0x14&0x18的值是0x10是怎么得来的.
2当从键盘输入 20 35 时,程序main() unsigned char a,b;scanf("%x",&a);scanf("%x",&b);printf("%x",a&b); 的输出结果是为什么是20呀.
3.测试char 型变量b的第5位是否为1的表达式是什么? 能不能给我详细讲解一下吗.
这是我在做题目的时候遇的一些问题.c语言高手们,请你帮我详细讲解一下.谢谢你啦.
进制是什么啊,能不能帮我讲解一下.

0x14和0x18显然应该都是十六进制的数
把它写成二进制
0x14=0001 0100
0x18=0001 1000
两个数做与(&)运算,就是对应位做“与”运算
结果=0001 0000
换回十六进制为0x10

&是个 位与运算符号
0x14&0x10 就是 0001 0100
& 0001 0000
--------------
= 0001 0000
同样16进制的 20 35
0010 0000
&0011 0101
--------------
=0010 0000
确定 第5位是否为1只要与0x10进行位与
b&0x10 结果是1第5位就是 1否则为0

我门通常用的是十进制,也就是逢十进1,也就是可以用
0,1,2,3,4,5,6,7,8,9表示个位,当到十的时候就进了一位,变成了两位10

同理,八进制是逢八进1,也就是可以用
0,1,2,3,4,5,6,7表示个位,当到八的时候变成了两位10,我们在八进制数10前面加上0,八进制数10就变成了010了,010表示8,015表示1*8+5=13,那么我门再看一个数046表示多少呢?表示4*8+6=42

同理,十六进制是逢十六进1,也就是可以用
0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f表示个位,其中a,b,c,d,e,f分别表示十进制中的10,11,12,13,14,15,在十六进制小于十六的都是用一位来表示,当数等于16的时候就要进位了,变成了10,我们为了和十进制区别,在10前面加0x10,表示这个数是用16进制表示的,那么0x10由于是逢16进一,所以0x10表示的不是10,而是16,所以0x2a=2*16+a=2*16+10=42

进制表示