全国计算机等级考试二级教程-C语言程序设计_第15章_位运算

 

位运算,不适用于实数,仅仅适用于整数、字符。

C语言的位运算只能操作整数、字符,实数是指数方式表示的,不适用于位运算。

 

 1 #define _CRT_SECURE_NO_WARNINGS
 2 
 3 #include<stdio.h>
 4 #include<stdlib.h>
 5 
 6 main()
 7 {
 8     unsigned int num = -1;
 9 
10     printf("%d,%u\n", num, num);
11 
12     system("pause");
13 }

 

输出结果:

-1,4294967295
请按任意键继续. . .

 

乱码

 

 1 #define _CRT_SECURE_NO_WARNINGS
 2 
 3 #include<stdio.h>
 4 #include<stdlib.h>
 5 
 6 main()
 7 {
 8     printf("%d\n", 10.3);
 9 
10     printf("%f\n", 10);
11     
12     printf("%d\n", (int)10.3);
13 
14     printf("%f\n", (float)10);
15 
16     system("pause");
17 };

 

原码

也叫 符号-绝对值码

最高位0表示正,1表示负,其余二进制位是该数字的绝对值的二进制位。

原码简单易懂

加减乘除复杂,存在加减乘除四种运算,增加了CPU的复杂度

零的表示不唯一

没有在计算机中应用

 

反码

反码运算不便,也没有在计算机中应用。

 

移码

移码表示数值平移n位,n称为移码量

移码主要用于浮点数的阶码的存储

 

补码

已知十进制求二进制

求正整数的二进制

除2取余,直至商为零,余数倒叙排序。

 

求负整数的二进制

先求与该负数相对应的正整数的二进制,然后将所有位取反,末尾加1,不够位数时,左边补1

 

求零的二进制

全是0

 

已知二进制求十进制

如果首位是0,则表明是正整数,按普通方法来求

如果首位是1,则表明是负整数,将所有位取反,末尾加1,所得数字就是该负数的绝对值。

 

1 按位取反~

0变1

1变0

之前左边省略的0,变1

 

2 左移<<

i<<1 表示把 i 的所有二进制位左移一位

左移 n 位相当于乘以 2 的 n 次方

 

面试题:

 

 1 #include<stdio.h>
 2 
 3 main()
 4 {
 5     int i;
 6 
 7     i = i * 8;
 8     i = i << 3;
 9 
10     /* 请问上述两个语句,哪个语句执行的速度快 */
11 }

 

3 右移>>

右端(低位)移出的二进制数舍弃,左端(高位)移入的二进制分两种情况:对于无符号整数和正整数,高位补0;对于负整数,高位补1.

 

4 按位与&

类似逻辑与&&,相当于把每一位进行逻辑与&&

&i 取i的地址

i&j i按位与j

1&1==1

1&0==0

0&1==0

0&0==0

 

5 按位异或^

相同为0,不同为1

1^0==1

0^1==1

1^1==0

0^0==0

 

6 按位或|

类似逻辑或||,相当于把每一位进行逻辑或||

1|1==1

1|0==1

0|1==1

0|0==0

 

位运算的现实意义:

通过位运算符,我们可以对数据的操作精确到每一位

 

转载于:https://www.cnblogs.com/denggelin/p/5450807.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值