day01
c语言基础
aeb -> a*10的b次方
交换两个变量的值
int main()
{
int v1 = 10;
int v2 = 11;
// methodA:
int temp = v1;
v1 = v2;
v2 = tmep;
// methodB:
v1 = v2-v1; // v1 = 11 - 10;
v2 = v2 - v1; // v2 = 11 - 1; v2 = 10;
v1 = v2 + v1; // v1 = 10 + 1; v1 = 11;
// methodC:
v1 = v1 ^ v2; // v1 = 10 ^ 11;
v2 = v1 ^ v2; // v2 = 10 ^ 11 ^ 11; v2 = 10;
v1 = v1 ^ v2; // v1 = 10 ^ 11 ^ 10; v1 = 11;
return 0;
}
判断一个数的奇偶性
A:%2 == 0;
B:使用位与&运算符判断
可以使用这个来精简if..else语句
true =1;false = 0;
最后一位是1奇数,0 偶数
a&1 == 1; // 奇数
a&1 == 0; // 偶数
取出最后一位的值&1;
int main()
{
int a = 10 ;
if(a % 2 == 0)
{
printf("这是偶数\n");
}
else
{
printf("这是基数\n");
}
代码精简
有返回值得方法才可以在这里使用
a % 2 == 0 ? printf("这是偶数\n") : printf("这是基数\n");
true = 1; false = 0;
a % 2 ? printf("这是基数\n") : printf("这是偶数\n");
新写法
if(a % 2)
{
printf("这是基数\n");
}
else
{
printf("这是偶数\n");
}
位&
/**
11 1011
9 1001
10 1010
6 0110
最后1一位就1就是基数,0就是偶数
最后1位&1等于1就是基数,0就是偶数
取出最后一位人数据&1
*/
return 0;
}
编写整数在内存中的二进制位
按位取反:
~9 = -10;
int printfBinary(int num)
{
// sizeof(num)*8-1
// 32 bate: 16-1=15;
// 64 bate: 32-1=31;
int tmp = (sizeof(num)<<3) - 1;
while(tmp >= 0)
{
// 先→移32位再取出值
int value = num>>tmp & 1;
printf("%d",value);
tmp--;
// 每隔4位加一个空格
if((tmp +1 ) % 4 == 0)
{
printf(" ");
}
}
printf("\n");
return 0;
}
int main()
{
printfBinary(-10);
return 0;
}
负数的补码
例-2的补码
0的原码,反码,补码全部是0
在二进制中最高位0代表正数,1代表负数
-2的补码过程
用二进制在内存中的表现形式进行转换
先将-2转换成正数在内存中的表现形式
2原码:0000-0000 0000-0000 0000-0000 0000-0010
-2原码:1000-0000 0000-0000 0000-0000 0000-0010
-2反码:1111-1111 1111-1111 1111-1111 1111-1101
负数的补码=负数的原码+1
+1 :0000-0000 0000-0000 0000-0000 0000-0001
-2补码:1111-1111 1111-1111 1111-1111 1111-1110
即求得 -2的补码为1111-1111 1111-1111 1111-1111 1111-1110