容易迷糊的C/C++语法及计算机存储容量单位bit、 byte、 K 、M 、G 之间的换算关系

参考

  • C语言中的*和&符号
  • c语言 基本运算

1、*、 & 指针地址和具体内容

int a = 10; // a是声明成一个int类型的值
// 下面b是声明成一个放int类型的指针,也就是地址,所以在声明时表示变量放的是地址
// &a表示获取a的地址,赋值给类型也是地址的b
int b = &a;// 将a的地址赋值给b,b里放的也是地址
printf("a:%d\n", a); // 直接打印10,也就是直接访问a里的内容
printf("&a:%d\n", &a); // 访问a的地址
//printf("
a:%d\n", a); //
printf("
&a:%d\n", &a);
printf("b:%d\n", b); // 访问b里的内容,b里放的是地址
printf("&b:%d\n", &b);// 访问b里的内容的真实内容
printf("
b:%d\n", b);// 访问b的地址
// &xxx 同效果 xxx
printf("
&b:%d\n", &b);// 可以拆解为(&b),&b表示b的地址,
&b表示b里放的实质内容,实际是a的地址也就是b,*&b就是a,就是b

打印结果:

a:10
&a:-478043188
*&a:10
b:-478043188
&b:-478043200
*b:10
**&b:10


2、常见运算符:位运算符

所谓位运算就是对每一个二进制位进行运算。C语言一共提供了6种位运算符,只能对整数进行操作,分别是:&按位与、|按位或、^按位异或、<<左移、>>右移、~取反。

2.1.& 按位与

使用形式:整数a & 整数b
功能:整数a和b各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。
举例:比如9&5,其实就是1001&101=1,因此9&5=1
规律:
相同整数相&的结果是整数本身。比如5&5=5
多个整数相&的结果跟顺序无关。比如5&6&7=5&7&6

2.2.| 按位或

使用形式:整数a | 整数b
功能:整数a和b各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1,否则为0。参与运算的数以补码方式出现。
举例:比如9|5,其实就是1001|101=1101,因此9|5=13
规律:

  • 相同整数相|的结果是整数本身。比如5|5=5
  • 多个整数相|的结果跟顺序无关。比如5|6|7=5|7|6
2.3.^ 按位异或

使用形式:整数a ^ 整数b
功能:整数a和b各对应的二进位相异或。当对应的二进位相异(不相同)时,结果为1,否则为0。参与运算的数以补码方式出现。
举例:比如9^5,其实就是1001^101=1100,因此9^5=12
规律:

  • 二进制中,与1相^就会取反,与0相^保持原位
  • 相同整数相^的结果是0。比如5^5=0
  • 多个整数相^的结果跟顺序无关。比如5^6^7=5^7^6
  • 因此得出结论:a^b^a = b
2.4.~ 取反

~为单目运算符,具有右结合性,使用形式:~整数a
功能:对整数a的各二进位进行取反(0变1,1变0)
举例:比如~9,其实就是~(0000 0000 0000 0000 0000 0000 0000 1001)=(1111 1111 1111 1111 1111 1111 1111 0110),因此~9=-10

2.5.<< 左移

<<是双目运算符,使用形式:整数a<<正数n
功能:把整数a的各二进位全部左移n位,高位丢弃,低位补0。左移n位其实就是乘以2的n次方。
举例:3<<4,3本来是0000 0011,左移4位后变成了0011 0000,因此3<<4 = 48 = 3 * 24
需要注意的是:由于左移是丢弃最高位,0补最低位,所以符号位也会被丢弃,左移出来的结果值可能会改变正负性

2.6.>> 右移

>>是双目运算符,使用形式:整数a>>正数n
功能:把整数a的各二进位全部右移n位,保持符号位不变。右移n位其实就是除以2的n次方。
举例:32>>3,32本来是0010 0000,右移3位后变成了0000 0100,因此32>>3 = 4 = 32 / 23


参考:

  • 位bit,字节byte,K,M,G(转)
计算机存储容量单位bit、 byte、 K 、M 、G 之间的换算关系

1 byte = 8 bit
1 KB = 1024 bytes = 1x210 bytes
1 MB = 1024 KB = 1x220 bytes
1 GB = 1024 MB = 1x230 bytes
1 TB = 1024GB = 1x240 bytes

bit:

位,是电子计算机中最小的数据单位。每一位的状态只能是0或1

byte:

字节,是由8个位所组成,可代表一个字符(A~Z)、数字(0~9)、或符号(,.?!%&+-*/),是内存储存数据的基本单位
它是存储空间的基本计量单位。1个字节可以储存1个英文字母或者半个汉字,换句话说,1个汉字占据2个字节的存储空间

一些存储器厂家特别是硬盘厂家就更紧密结合十进制来计算,这就是为什么操作系统显示的容量与厂家标示的容量有些一些差异的原因
(十进制)
1 byte (B) = 8 bits (b)
1 Kilobyte (K / KB) = 10^3 bytes = 1,000 bytes
1 Megabyte (M / MB) = 10^6 bytes = 1,000,000 bytes
1 Gigabyte (G / GB) = 10^9 bytes = 1,000,000,000 bytes
1 Terabyte (T / TB) = 10^12 bytes = 1,000,000,000,000 bytes

你可能感兴趣的:(容易迷糊的C/C++语法及计算机存储容量单位bit、 byte、 K 、M 、G 之间的换算关系)