赞
踩
目录
+ - * / %
2进制数据:0至1的数字组成
8进制数据:0至7的数字组成
10进制数据:0至9的数字组成
16进制数据:0 1 2 3 4 5 6 7 8 9 a b c d e f
- //代码1
- #define _CRT_SECURE_NO_WARNINGS 1
- #include <stdio.h>
- int main()
- {
- int a = 4, b = 7;
- printf("交换前:a=%d,交换后:b=%d\n", a, b);
- a = a + b;
- b = a - b;
- a = a - b;
- printf("交换前:a=%d,交换后:b=%d", a, b);
- return 0;
- }
- //代码2
- #define _CRT_SECURE_NO_WARNINGS 1
- #include <stdio.h>
- int main()
- {
- int a = 4, b = 7;
- printf("交换前:a=%d,交换后:b=%d\n", a, b);
- a = a ^ b;
- b = a^b;
- a = a^b;
- printf("交换后:a=%d,交换后:b=%d", a, b);
- return 0;
- }
- #define _CRT_SECURE_NO_WARNINGS 1
- #include <stdio.h>
- void test1(int arr[])
- {
- printf("%d\n", sizeof(arr));
- }
- void test2(char ch[])
- {
- printf("%d\n", sizeof(ch));
- }
- int main()
- {
- int arr[10] = { 0 };
- char ch[10] = { 0 };
- printf("%d\n", sizeof(arr));//40
- printf("%d\n", sizeof(ch));//10
- test1(arr);//4
- test2(ch);//4
- return 0;
- }
表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度一般就是int的字节长度,同时也是CPU的通用寄存器的长度。
因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。
通用CPU(general-purpose CPU)是难以直接实现两个8比特字节直接相加运算(虽然机器指令中可能有这种字节相加指令)。所以,表达式中各种长度可能小于int长度的整型值,都必须先转换为int或unsigned int,然后才能送入CPU去执行运算。
- int main()
- {
- char a = 0xb6;//0xb6为整型提升存储进a中的数据不再是原来的
- short b = 0xb600;//原因同上
- int c = 0xb6000000;
- if (a == 0xb6)
- printf("a");
- if (b == 0xb600)
- printf("b");
- if (c == 0xb6000000)
- printf("c");
- return 0;
- }
原因:c只要参与表达式运算,就会发生整形提升,表达式 +c ,就会发生提升,所以 sizeof(+c) 是4个字
节。表达式 -c 也会发生整形提升,所以 sizeof(-c) 是4个字节,但是 sizeof(c) ,就是1个字节。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。