建个人网站有什么好处,网站 绝对路径 相对路径,设计本体论,网站拒绝被百度收录一、%运算符两侧只能是整数
在C语言中#xff0c;% 运算符称为模运算符或取余运算符#xff0c;它用于计算两个整数相除后的余数。当使用 % 运算符时#xff0c;操作数必须是整数类型#xff08;包括 char、int、long 等#xff09;。
语法
remainder div…一、%运算符两侧只能是整数
在C语言中% 运算符称为模运算符或取余运算符它用于计算两个整数相除后的余数。当使用 % 运算符时操作数必须是整数类型包括 char、int、long 等。
语法
remainder dividend % divisor;
- **dividend**被除数 - **divisor**除数 - **remainder**结果即被除数除以除数后的余数
规则 1. **符号规则**如果被除数和除数都是正数或都是负数余数的符号与被除数相同。如果被除数和除数符号不同余数的符号与除数相同。 2. **零除错误**除数不能为零否则会导致运行时错误。 示例 以下是使用 % 运算符的一些示例
#include stdio.hint main() {int a 10;int b 3;int c -10;int d -3;// 正数除以正数printf(10 %% 3 %d\n, a % b); // 输出 1// 负数除以正数printf(-10 %% 3 %d\n, c % b); // 输出 2// 正数除以负数printf(10 %% -3 %d\n, a % d); // 输出 -2// 负数除以负数printf(-10 %% -3 %d\n, c % d); // 输出 -1return 0;
} 注意事项 - 在使用 % 运算符时确保除数不为零。 - 余数的符号取决于被除数和除数的符号这在进行算术运算时需要特别注意。 应用场景 模运算符在多种场景中非常有用例如 - 检查一个数是否是另一个数的倍数。 - 在循环中进行周期性操作。 - 计算日期和时间例如计算今天是星期几。
模运算符是整数运算中的基本工具掌握其用法对于进行有效的整数运算至关重要。
二、printf()函数输出的数据都隐含右or左对齐
下面是一个简单的C程序用来验证printf()函数在不同情况下的对齐方式
#include stdio.hint main() {int num 123;double pi 3.14159;char str[] Moonshot;// 默认右对齐printf(Right aligned (default):\n);printf(%10d\n, num); // 整数默认右对齐printf(%10.2f\n, pi); // 浮点数默认右对齐printf(%10s\n, str); // 字符串默认右对齐// 显式右对齐printf(\nRight aligned (explicit):\n);printf(%10d\n, num); // 整数显式右对齐printf(%10.2f\n, pi); // 浮点数显式右对齐printf(%10s\n, str); // 字符串显式右对齐// 左对齐printf(\nLeft aligned:\n);printf(%-10d\n, num); // 整数左对齐printf(%-10.2f\n, pi); // 浮点数左对齐printf(%-10s\n, str); // 字符串左对齐return 0;
}
在这个程序中我们定义了一个整数num一个浮点数pi和一个字符串str。然后我们分别使用默认的右对齐、显式指定的右对齐和左对齐来输出这些变量。
当你运行这个程序时你会看到以下输出
Right aligned (default):1233.14MoonshotRight aligned (explicit):1233.14MoonshotLeft aligned:
123
3.14
Moonshot
请按任意键继续. . .
请注意对于字符串左对齐不会在字符串后面添加额外的空格因为字符串的长度已经确定了。对于整数和浮点数左对齐会在数值的左侧添加空格直到达到指定的宽度。
三、位运算对象只能是整型和字符型数据
位运算是计算机编程中对整数在二进制形式上进行的运算。位运算符在C语言中包括以下几种 按位与AND - 两个位都为1真时结果才为1真。例5 3 的二进制表示为 00000101 00000011结果是 00000001即1。 按位或OR - | 两个位中至少有一个为1真时结果为1真。例5 | 3 的二进制表示为 00000101 | 00000011结果是 00000111即7。 按位异或XOR - ^ 两个位相同则结果为0(假)不同则结果为1真。例5 ^ 3 的二进制表示为 00000101^00000011结果是 110即6。 按位取反NOT - ~一个简单的方法加一后取其相反数 反转所有位0变11变0。例~5 的二进制表示为 11111010假设是8位整数。 左移Left Shift - 将数字的所有位向左移动指定的位数右边空出的位补0。例5 1 的二进制表示为 101 1结果是 00001010即10。 右移Right Shift - 将数字的所有位向右移动指定的位数左边空出的位补符号位有符号数或0无符号数。例5 1 的二进制表示为 101 1结果是00000010即2。
位运算在编程中非常有用尤其是在需要优化性能和处理硬件级别的操作时。例如位运算可以用来设置、清除、切换和检查特定位的状态这在处理位掩码和标志时非常有用。
下面是一个简单的C语言示例演示了这些位运算符的使用
#include stdio.hint main() {int a 5; // 二进制表示为 101int b 3; // 二进制表示为 011// 按位与printf(a b %d\n, a b);// 按位或printf(a | b %d\n, a | b);// 按位异或printf(a ^ b %d\n, a ^ b);// 按位取反printf(~a %d\n, ~a);// 左移printf(a 1 %d\n, a 1);// 右移printf(a 1 %d\n, a 1);return 0;
}
a b 1
a | b 7
a ^ b 6
~a -6
a 1 10
a 1 2
请按任意键继续. . .
下面重点讲一下~按位取反符号
在C语言中按位取反操作符 ~ 用于反转变量的所有位。对于整数 5其按位取反的结果取决于整数的位数和是否有符号。
假设我们使用的是标准的8位整数有符号整数整数 5 的二进制表示补码形式如下
00000101
应用按位取反操作
11111010
在8位整数中这将是一个很大的负数。在补码表示法中负数是通过取反所有位然后加1来得到的。因此要得到这个负数的原始值我们需要从这个二进制数减去1然后取反 11111010
- 00000001
------------11111001
然后取反
0000010
这表示 -6。因此对于8位整数5 的按位取反结果是 -6。
四、当例子为负数时位运算会有啥不同
下面是在上面的基础上一个简单的C语言示例演示了这些位运算符的使用
#include stdio.hint main() {int a -5; // 二进制表示为 101int b -3; // 二进制表示为 011// 按位与printf(a b %d\n, a b);// 按位或printf(a | b %d\n, a | b);// 按位异或printf(a ^ b %d\n, a ^ b);// 按位取反printf(~a %d\n, ~a);// 左移printf(a 1 %d\n, a 1);// 右移printf(a 1 %d\n, a 1);return 0;
}
在C语言中整数是以补码形式存储的所以负数的二进制表示不是直接的“101”和“011”。让我们来分析你提供的代码和预期的输出。
首先让我们确定 a 和 b 的二进制表示。假设我们使用的是32位整数
a -5 的补码表示为11111011b -3 的补码表示为11111101
现在我们可以计算位运算的结果 按位与AND - a b 11111011 11111101 1111100111111001 - 00000001 11111000~(11111000)00000111000001117-7 按位或OR - a | b 11111011 11111101 11111111 11111111 - 00000001 11111110~(11111110) 0000000100000001 1-1 按位异或XOR - a ^ b 11111011 11111101 00000110000001106 按位取反NOT - ~a 对于 a -5其补码表示为 11111011取反后得到 00000100即4. 左移Left Shift - a 1(低位补零) 11111011 1 1111011011110110- 00000001 11110101~(11110101) 0000101000001010 10-10 右移Right Shift - a 1 高位补一 11111011 1 1111110111111101 - 00000001 11111100~11111100 0000001100000011 3-3
因此预期的输出将是
a b -7
a | b -1
a ^ b 6
~a 4
a 1 -10
a 1 -3
请按任意键继续. . .
从以上例子我们可以得出结论
1负数在计算机存储的时候是一起补码的形式存储的
以-3为例其的补码二进制表示如下
首先找到3的二进制表示00000011然后对该数进行按位取反操作11111100。最后将结果加1以得到补码11111101。
2在对负数进行左移右移操作的时候要遵循 左移低位补零右移高位补一的原则
五、