c语言以冒号分割字符串,C语言里面的冒号
看下面一段代碼:
struct test {
int body1:1;
int body2:2;
};
這里提出的問題是,結構體里面的冒號的作用是什么。這種冒號的用法不是我隨便杜撰的,而是在實際的代碼里面看到的。
在C++的函數定義時,參數列表之后可以使用冒號來給變量賦值,這里的冒號是不是也起著給結構體成員賦默認值的作用呢?是與不是,通過測試來揭曉。
首先,我寫了一個測試驅動函數test來專門進行測試,如下:
void test()
{
structtest struction;
printf("body1:%d; body2:%d\n", struction.body1,struction.body2);
}
在定義結構體變量struction時,我沒有給它賦值,以此來測試是不是給它的成員賦了默認值{1,2}。該函數在編譯后,運行的結果如下:
body1:0;? body2:0
失望了,不是我們認為的默認賦值。
那么修改變量的定義,給它們賦值后再打印,如:struct test struction = {1,2};
這次,程序編譯后的運行結果是:
body1:-1; body2:-2
這次的結果怎么解釋?是不是冒號起一個取負數的作用,后面的數字沒用?還是其它,再取幾組數字試試:
struct test struction = {1,2};
結果:body1:-1; body2:-2
struct test struction = {1,4};
結果:編譯報錯,在struct test struction = {1,2}賦值語句處:warning:overflow in implicit constant version。
居然出現了溢出,應該是在把4賦給struction.body2時溢出。這下,有結果了,冒號后面的數字表示的是數位。
據我推測,冒號在這里的用處主要為限制使用位數:
x:num,表示x只有其最后的num個bit位有效,且在計算時是用的“補碼”表示。
如x:3,如果x賦值為7,則x值為“-1”(第三位為1,表示負數,其它位取反加1,為01,則結果為-1)。
另外,結果的正負是與變量本身的定義有關。
如x為Int時,x:3,賦值為7,則實際結果為-1,若x為 unsigned int,則x:3,賦值為7時,結果為7.
總結
以上是生活随笔為你收集整理的c语言以冒号分割字符串,C语言里面的冒号的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux gitlab 9 邮件不发送
- 下一篇: C语言程序设计双语版,双语版C程序设计(