1.补码,计算机二进制在内存中如何显示的就是补码
2.查看每种数据类型的范围
如果想输出无符号整型,使用的是UINT_MAX可以得到长度。
3.原码,反码,补码
负数:(以-1为例)
原码: 1000 0000 0000 0000 00000000 0000 0001 -1的原码
反码: 1111 1111 1111 1111 11111111 1111 1110 -1的反码(符号位不变,其它位取反)
补码: 1111 1111 1111 1111 11111111 1111 1111 -1的补码(符号位不变,反码基础上加1)
4、操作符
&与,或,异或,取反操作符
参数1 |
参数2 |
求&的结果 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
比如:(7&3)=3
与可以清除某些位数
|:或操作
参数2 |
求|的结果 |
|
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
^异或
参数2 |
求^的结果 |
|
1 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
案例:
~取反操作符
1 取反得 0
0 取反得 1
unsigned char ch1 = 1; //0000 0001 1
unsigned char ch2= ~ch1; //1111 1110 254
<< 左移,值变成原来的2倍
>> 右移 值变成原来的1/2
左移位效果
在上面的基础上进行右移位的效果如下:
5、打印二进制文件
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void main1()
{
intnum;
scanf("%d",&num);
printf("num=%d,&num=%p\n",num,&num);
int data = 1 << 31;//构建一个相与的数据
for(int i = 1; i <= 32; i++)
{
inttemp = num&data;//求出首位相与
if(temp == 0)
{
putchar('0');
}
else
{
putchar('1');
}
num<<= 1;
if(i % 4 == 0)
{
printf("");
}
}
system("pause");
}
void main()
{
intnum;
scanf("%d",&num);
printf("num=%d,&num=%p\n",num, &num);
intdata = 1 << 31;//构建一个相与的数据
if(num < 0)
{
num= ~num + 1;//求原码
num= num | data;//设置符号位
}
for(int i = 1; i <= 32; i++)
{
inttemp = num&data;//求出首位相与
if(temp == 0)
{
putchar('0');
}
else
{
putchar('1');
}
num<<= 1;
if(i % 4 == 0)
{
printf("");
}
}
system("pause");
}