- VisualStudio2022
- pprof-Hướng dẫn sử dụng nó trong bản mạng trực tiếp
- Triển khai C# các loại hộp chọn nhiều màu lựa chọn thả xuống, cây lựa chọn nhiều màu lựa chọn thả xuống và các nút tối đa
- [Ghi chú học tập] Cơ sở dữ liệu cấu trúc: cat tree
Bài viết này sẽ giới thiệu các kiểu dữ liệu, mảng, cấu trúc, macro, toán tử, phép toán, phép toán ma trận, hàm, điều chỉnh điều khiển luồng, loại chính xác vòng, biến loại vòng (in, out, inout), loại hàm tham số vòng, vv trong GLSL và. Hóa và tái sử dụng mã hóa.
Để biết phần giới thiệu về Shader trong Unity, hãy xem → [Unity3D] Hằng số, biến, cấu trúc và chức năng của Shader. giới thiệu chi tiết về quy trình xuất, hãy xem → [OpenGL ES] Đường dẫn xuất.
kiểu | minh họa | Trường hợp |
---|---|---|
trống rỗng | Loại trống, nghĩa là không trả về bất kỳ giá trị nào | niềm vui trống rỗng() |
bool | Kiểu Boolean đúng, sai | bool a = đúng; |
int | số nguyên có dấu | int a = 0; |
trôi nổi | đã ký một số comma | thả nổi a = 1,0; phao b = 2.; |
vec2, vec3, vec4 | Vectơ dấu comoma 2D, 3D, 4D | vec2 a = vec2(1., 2.); vec2 b = vec2(1.); // ⇔ vec2(1., 1.) vec3 c = vec3(a, 3.); // ⇔ vec3(1., 2., 3.) |
bvec2, bvec3, bvec4 | Vectơ Boolean 2D, 3D, 4D | bvec2 a = bvec2(đúng, sai); bvec2 b = bvec2(đúng); // ⇔ bvec2(đúng, đúng) bec3 c = bvec3(a, true); // ⇔ bvec3(true, false, true) |
ivec2, ivec3, ivec4 | Các số nguyên 2D, 3D, 4D | ivec2 a = ivec2(1, 2); ivec2 b = ivec2(1); // ⇔ ivec2(1, 1) ivec3 c = ivec3(a, 3); // ⇔ ivec3(1, 2, 3) |
mat2, mat3, mat4 | Ma trận comma 2x2, 3x3, 4x4 (vectơ cột) | mat2 a = mat2(1., 2., 3., 4.); mat2 b = mat2(1.); // ⇔ mat2(1., 1., 1., 1.) |
bộ lấy mẫu2D | kết nối cấu hình 2D | bộ lấy mẫu sampler2D; |
phương thức cài đặt mẫu được lấy | cấu hình hộp thư kết nối | bộ lấy khối mẫu bộ sưu tập; |
Lưu ý: Các phần tử trong mat2, mat3, mat4 được sắp xếp theo cột thứ tự thú vị, tức là mat2 m = mat2(m11, m21, m12, m22) và công thức match like after.
Các (vec2, vec3, vec4) trong GLSL có thể biểu thị chế độ không gian (x, y, z, w), màu (r, g, b, a) hoặc cấu hình kết nối chế độ (s, t, p, q) , vì vậy GLSL cung cấp nhiều phương pháp truy cập các thành phần khác nhau.
vec4 v = vec4(1.0, 2.0, 3.0, 4.0); float x1 = vx; // 1.0 float x2 = vr; // 1.0 float x3 = vs; // 1.0 float x4 = v[0]; xyz; // vec3(1.0, 2.0, 3.0) vec3 stq = v.stq; // vec3(1.0, 2.0, 3.0) vec3 rgb = v.rgb; // vec3(1.0, 2.0, 3.0) vec3 abc = vec3(v[0], v[1], v [2]); vec3(1.0, 2.0, 3.0)
GLSL có thể sử dụng các hàm tạo để chuyển đổi rõ ràng kiểu.
// 0 hoặc 0.0 được chuyển thành false, non-0 được chuyển thành true bool a1 = bool(1.0); // true bool a2 = bool(0); // false // true được chuyển thành 1 hoặc 1.0, false được chuyển đổi thành 0 hoặc 0,0 int a3 = int(true); // 1 float a4 = float(false); // 0,0 int a5 = int(2.0); /1.0
Mảng hỗ trợ chỉ định GLSL một chiều.
// mảng float float[3] a = float[] (1.0, 2.0, 3.0); float b[3] = float[] (1.0, 2.0, 3.0); float c[3] = float[3] (1.0) ), 2.0, 3.0); // vec mảng vec2[2] d = vec2[] (vec2(0.0), vec2(1.0));
cấu trúc ánh sáng { vec4 color; vec3 pos }; const light lgt = light(vec4(1.0), vec3(0.0));
Lưu ý: Không thể sửa đổi các trường trong cấu trúc bằng const.
phạm vi | biến | minh họa |
---|---|---|
Đầu ra của Vertex vertex | caopvec4 gl_Vị trí; | Chất lượng thông tin |
Đầu ra của Vertex vertex | phao trunk bình bình gl_PointSize; | Giá trị kích thước (hợp lệ chỉ ở GL_POINTS nguyên thủy ở chế độ) |
Các biến đầu vào của phân đoạn bóng tối | trung bìnhpvec4 gl_FragCoord; | Vị trí của đoạn trong không gian màn hình Giả sử rằng chiều rộng và chiều cao của màn hình lần như chiều rộng và chiều cao. x: tọa độ x của đoạn, phạm vi giá trị [0, width - 1] y: tọa độ x của đoạn, phạm vi giá trị [0, chiều cao - 1] z: thư giãn độ sâu của đoạn, phạm vi giá trị [0, 1] w: luôn là 1, thường dùng để phân phối cảnh |
Các biến đầu vào của phân đoạn bóng tối | bool gl_FrontFacing; | Đánh dấu hiện thủy lực phải là một phần của thủy tinh trước hay không |
Đầu ra của phân đoạn bóng tối | trung bìnhpvec4 gl_FragColor; | Đặt màu của bản vá hiện tại |
Giống như ngôn ngữ C, macro cũng có thể được định nghĩa trong GLSL thông qua #define, như sau.
#definePI 3.14159265359
Ngoài ra, GLSL còn cung cấp sẵn một số macro tích hợp.
__LINE__ // Số dòng trong hiện tại mã nguồn __VERSION__ // Số phiên bản glsl hiện tại, xuất ra giới hạn như: 300 GL_ES // Môi trường chạy hiện tại phải là OPGL ES hay không, 1 nghĩa là GL_FRAGMENT_PRECISION_HIGH // Trình bày bóng đoạn của hiện tại hệ thống tại hỗ trợ hỗ trợ hay không có độ chính xác nổi bật, 1 có nghĩa là được hỗ trợ
Ưu tiên (càng nhỏ, càng cao) | toán tử | minh họa | hợp nhất tính toán |
---|---|---|---|
1 | () | Nhóm: a * (b + c) | không áp dụng |
2 | [] () . ++ -- |
mảng số chỉ Tham số phương thức: fun(arg1, arg2) Quyền truy cập tài sản Tự tăng (a++) / Tự giảm (a--) |
LR |
3 | ++ -- + - ! |
Tự tăng (++a) / Tự giảm (--a) Dấu dương (+a) Dấu âm (-a) Phủ định(!a) |
RL |
4 | * / % |
Các nhân/chia được phép Phép tính số nguyên dư dư (hàm mod dùng để tìm số dư của dấu phẩy) |
LR |
5 | + - | Các phép tính cộng/trừ | LR |
7 | < > <= >= | Quan hệ toán tử | LR |
8 | == != | thức đẳng cấp toán tử | LR |
12 | && | logicVÀ | LR |
13 | ^^ | HOẶC độc quyền về mặt logic (tính hữu dụng của nó về cơ bản bằng !=) | LR |
14 | || | logic hoặc | LR |
15 | ? : | cấp ba toán tử | LR |
16 | = += -= *= /= | Bài tập và bài tập hợp | LR |
17 | , | kích hoạt chuỗi phân tích bổ sung | LR |
GLSL Tất cả đều phải quán. Các biểu thức sau đây không chính xác.
// Đoạn mã sau sẽ báo lỗi khi chạy int a = 2.; int b = 1. + 2; float c = 2;
// vec2(1., 2.) + 3. // vec2(4., 5.) vec2 b = 3. + vec2(1., 2.); 4. , 5.) vec2 c = vec2(1 ., 2.) * 3. // vec2(3., 6.) vec2 d = 3. * vec2(1., 2.); // vec2(3., 6.) // Vector và các phép toán vec2 e = vec2(1., 2 .) + vec2(3., 4. ); // vec2(4., 6.) vec2 f = vec2(1., 2.) * vec2(3., 4.); // vec2(3., 8.)
// Các phép toán vô hướng và ma trận mat2 a = mat2(1.) + 2. // mat2(3.) mat2 b = 2. + mat2(1. // mat2(3.) mat2 c = mat2(1 .) * 2.; // mat2(2.) mat2 d = 2. * mat2(1.); // mat2(2.) // vec2(1., 2.) * mat2(1., 2., 3., 4.); // vec2(5., 11.) vec2 f = mat2 (1., 2., 3., 4.) * vec2(1 ., 2.); vec2(7., 10.) // Ma trận và các ma trận toán được phép (các phần tử toán học được phép tương ứng của ma trận) mat2 g = mat2(1.) + mat2(2.); // mat2(3 .) mat2 h = MatrixCompMult(mat2(1.), mat2(2.)); // mat2(2.) // Ma trận và các ma trận phép toán (nhân ma trận) mat2 i = mat2(1., 2., 3. , 4.) * mat2(5., 6., 7., 8.); // mat2(23., 34., 31., 46.) mat2 j = mat2(5., 6., 7., 8.) * mat2(1., 2., 3., 4.); // mat2(19., 22 ., 43., 50.)
GLSL cho phép khai báo các hàm ở cấp độ bên ngoài cùng của chương trình. báo về giá trị trả về kiểu (void if not with the value return) tương tự như các hàm của ngôn ngữ C.
vec4 getPosition() { vec4 pos = vec4(0.,0.,0.,1.); return pos } void doubleSize(kích thước float đầu vào) { size = size * 2.0;
1) Các phép toán được phép.
sign(x), abs(x) // Dấu vết, giá trị tuyệt đối min(a, b), max(a, b) // Hàm tối đa ceil(x), sàn(x), round(x) / / Lấy hàm nguyên số fractal(x) // Lấy phần thập phân mod(x, y) // Lấy phần dư sqrt(x), pow(x), inversesqrt(x) // Hàm lũy thừa, inversesqrt(x)=1/sqrt(x) exp(x), exp2 (x) // Hàm mũ (e^x, 2^x) log(x), log2(x) // Hàm logarit độ(x ) , radian(x) // Hàm chuyển đổi góc sin(x), cos(x), tan(x), asin(x), acos(x), atan( x) // Hàm lượng Giác sinh(x), cosh(x), tanh(x) // Hàm hyperbolcol(x, min, max) // Ràng buộc x giữa min và max. , max, x) // Tỷ lệ làm, công thức: k=saturate((x-min)/(max-min) ), y=k*k*(3-2*k) trộn(a, b, f) // trộn, Công thức: y=(1-f)*a+f*b step(a, b) // If a>b, trả về 0; if a<=b, return 1 when a và b is a , mỗi thành phần được giá độc lập, được đánh giá như: step(fixed2(1,1),fixed(0,2))=(0,1)
Lưu ý: Phần đầu của hàm có thể là: float, vec2, vec3, vec4 và có thể được vận hành theo từng thành phần được phép; nguyên số toán, có thể sử dụng chỉ % cho phép dư dư comma, mod chỉ.
2) Logic toán được phép.
bvec z = lessThan(x, y) // So sánh x < y thành phần theo thành phần, ghi kết quả vào vị trí tương ứng của z bvec z = lessThanEqual(x, y) // So sánh x <= y thành phần, viết kết quả thành z Vị trí tương ứng của bvec z = GreaterThan(x, y) // So sánh x > y từng thành phần và ghi kết quả vào vị trí trí tương ứng của z bvec z = GreaterThanEqual(x, y) // So sánh x >= y từng thành phần, viết kết quả vào vị trí tương ứng của z bvec z =equal(x, y) // So sánh x == y từng thành phần, viết kết quả vào vị trí tương ứng của z bvec z = notEqual(x, y) // So sánh x từng thành phần != y, viết kết quả vào vị trí tương ứng của z bvec y = not(x) // Đảo ngược từng thành phần của bool vector bool y = Any (x) // Ifbất kỳ bất kỳ phần nào của
3) Các phép toán được phép.
distance(pos1, pos2) // Tính khoảng cách giữa pos1 và pos2 length(vec) // Tính mô-đun độ dài của normalize(vec) // Tính đơn vị của full dot(v1, v2) // Vector tích vô hướng chéo (v1, v2) // Vector tích chéo phản xạ(i, n) // Tính toán phản xạ dựa trên lựa chọn tiến và áp dụng tuyến tính (i và n không cần thiết) chuẩn hóa) khúc xạ(i, n, tỷ lệ); // Tính toán dựa trên, áp dụng tuyến tính và tỷ lệ chiết xuất (i và n cần) được chuẩn hóa, tỷ lệ chiết xuất của môi trường tới/chiết xuất của môi trường khúc xạ, hoặc sin (góc khúc) xạ)/ sin(góc tới))
4) Ma trận hoạt động.
// Ma trận và các ma trận toán được phép (các phần tử toán học tương ứng của ma trận) mat2 a = mat2(1.) + mat2(2.); // mat2(3.) mat2 b = MatrixCompMult(mat2) (1.), mat2(2.) ); // mat2(2.) // Ma trận và các phép toán (nhân ma trận) mat2 c = mat2(1., 2., 3., 4.) * mat2(5 ., 6., 7., 8.); // mat2(23., 34., 31., 46.) mat2 d = mat2(5., 6., 7., 8.) * mat2(1., 2., 3., 4.); // mat2(19., 22., 43., 50 .)
5) Chức năng truy vấn cấu hình.
kết nối vec4 (bộ lấy mẫu sampler2D, auto vec2); bộ lấy mẫu, vec3 độ;
Điều khiển luồng của GLSL rất giống với ngôn ngữ C, chủ yếu bao gồm if, for, while, continue và break. from debug phân đoạn bóng, không có thao tác tiếp theo nào được thực hiện và phân đoạn sẽ không được ghi vào bộ frame đệm.
for (int i = 0; i < 10; i++) { sum += a[i]; if (sum > 5.0) break; while (i < 10) { sum += a[i]; continue; } do { sum += a[i]; if ( > 5.0) loại bỏ i++;
Trong quá trình đổ bóng phân đoạn, GLSL có ba độ chính xác: caop (cao), trung bình (trung bình) và thấpp (thấp) cho các dấu comma.
màu float lowp khác nhau;
Việc thêm float highp chính xác vào dòng đầu tiên của trình đổ bóng phân đoạn cho biết rằng độ chính xác mặc định đã được đặt và tất cả các biến không biểu thị rõ ràng độ chính xác sẽ được xử lý theo độ chính xác mặc định.
phao có độ chính xác cao;
Chọn độ chính xác thích hợp bằng cách đánh giá môi trường hệ thống.
#ifdef GL_ES #ifdef GL_FRAGMENT_PRECISION_HIGH phao có độ chính xác cao; #else có độ chính xác trung bình cao; #endif #endif
Vòng loại | minh họa |
---|---|
không có | Vòng loại biến mặc định có thể được bỏ qua và có thể đọc và viết. |
hằng số | Biến được sửa đổi là loại chỉ đọc và biến phải được khởi tạo khi được xác định. |
thuộc tính | Nó chỉ có thể được sử dụng trong các trình đổ bóng đỉnh để sửa đổi các biến chỉ đọc toàn cục. Nó thường được sử dụng để sửa đổi các thuộc tính của đỉnh, chẳng hạn như: vị trí đỉnh, bình thường, tọa độ kết cấu, màu sắc, v.v. |
đồng phục | Sửa đổi các biến chỉ đọc toàn cục, thường được sử dụng để sửa đổi các biến được chương trình chuyển đến trình đổ bóng, chẳng hạn như: tỷ lệ khung hình màn hình, vị trí nguồn sáng, v.v. |
thay đổi | Các biến cần được sửa đổi để nội suy rasterization chỉ có thể đọc trong trình đổ bóng phân đoạn, chẳng hạn như tọa độ kết cấu, v.v. |
// Thuộc tính đổ bóng Vertex vec4 a_position; thuộc tính vec2 a_texCoord0; thay đổi vec2 v_texCoord0; void main() { gl_Position = vec4(a_position, 1.0); v_texCoord0 = a_texCoord0; v_texCoord0; void main() { gl_FragColor = kết cấu(u_texture, v_texCoord0 }
Các tham số của một hàm được truyền ở dạng sao chép theo mặc định, nghĩa là được truyền theo giá trị. Chúng ta có thể thêm các bộ hạn định vào các tham số để đạt được việc chuyển tham chiếu. Các bộ hạn định tham số được cung cấp trong GLSL như sau.
Vòng loại | minh họa |
---|---|
TRONG | Với vòng loại mặc định, các tham số được truyền theo giá trị và có thể được đọc và ghi trong hàm. |
bên ngoài | Các tham số được truyền bằng tham chiếu và chỉ có thể được ghi (chỉ ghi) trong hàm. |
vào ra | Các tham số được truyền bằng tham chiếu và có thể được đọc và ghi trong hàm. |
Ngoài các tham số hàm có thể được sửa đổi bằng in, out và inout, các biến toàn cục cũng có thể được sửa đổi bằng các vòng loại này, như sau.
// Vertex shader trong vec3 a_position; trong vec2 a_texCoord0; out vec2 v_texCoord0; void main() { gl_Position = vec4(a_position, 1.0); v_texCoord0 = a_texCoord0; v_texCoord0; ra vec4 o_fragColor; void main() { o_fragColor = kết cấu(u_texture, v_texCoord0 }
GLSL không cung cấp hàm #include Ví dụ: đoạn mã sau sẽ báo lỗi khi chạy.
#bao gồm
Để triển khai tệp glsl phụ thuộc vào tệp glsl khác, bạn có thể sử dụng công cụ sau để tải chuỗi glsl.
ShaderUtils.java.
nhập android.content.Context; nhập java.util.HashSet; nhập java.util.regex.Matcher; nhập java.util.regex.Pattern; /** * Lớp công cụ Shader* @author chú cừu béo */ lớp công khai ShaderUtils { // So khớp: #include hoặc #include "xxx" và không bắt đầu bằng chuỗi "//" cuối cùng tĩnh riêng tư INCLUDE_REGEX = "(?m)^(?!//\\s*)#include\\s+(<([^>]+)>|\"([^\"]+)\")"; /** * Tải xuống nội dung bóng thông báo * Xóa bóng đường dẫn đỉnh @param vertexShader, được coi là hạn chế như: "shaders/origin_vert.glsl" "shaders/origin_frag.glsl" */ public static String[] LoadShader(Context context, String vertexShader, String FragmentShader) { String vertex = StringUtils.loadString(context, vertexShader); Đỉnh chuỗi1 = trả về Chuỗi mới[] { vertex1, đoạn1 } } /** * Tải trình đổ bóng thông qua id tài nguyên * @param vertexShader id tài nguyên bóng tối cao cấp, có giới hạn như: R.raw.origin_vertex * @param FragmentShader id tài khoản nguyên trình đổ bóng, sản xuất như: R.raw.origin_fragment */ public static String[] LoadShader(Context context, int vertexShader, int FragmentShader) { String vertex = StringUtils.loadString(context, vertexShader); StringUtils.loadString(context, FragmentShader); Chuỗi vertex1 = thayIncludeFiles(ngữ cảnh, vertex }; /** * Thay thế tệp #include trong trình đổ bóng chuỗi bằng nội dung tệp */ public static String thayIncludeFiles(Context context, String shaderContent) { Mẫu mẫu = Pattern.compile(INCLUDE_REGEX); set = new HashSet<>(); // Được sử dụng để loại bỏ các bản sao bao return include returnIncludeFiles(context, shaderContent, Pattern, set ) } /** * Thay thế tệp #include trong shader chuỗi bằng tệp nội dung (tệp được bao gồm cũng có thể bao gồm, yêu cầu cuộc gọi đệ quy) */ thay thế chuỗi tĩnh thếIncludeFiles(Ngữ cảnh bối cảnh, String shaderContent, Mẫu mẫu, HashSet set) { Matcher matcher = sample.matcher(shaderContent); while (matcher.find()) { Chuỗi gócBrackets = matcher.group(2); // Chuỗi đường dẫn trong dấu ngoặc quoteMarks = matcher.group(3); // Đường path trong dấu ngoặc kép Tệp chuỗi = AngleBrackets != null ? AngleBrackets : quoteMarks; // Xóa Sao chép bao gồm } else { set.add(file); file bao gồm String quoteShader = Matcher.quoteReplacement(includeShader); // Thay thế các ký tự thoát trong chuỗi String WholeShader = thayIncludeFiles(context, quoteShader, Pattern, set); vào sb} } matcher.appendTail(sb);
StringUtils.java.
nhập android.content.Context; nhập java.io.BufferedReader; nhập java.io.IOException; nhập java.io.InputStream; nhập java.io.InputStreamReader; * Lớp công cụ chuỗi* @author chú ý béo * / lớp công khai StringUtils { /** * Đọc chuỗi theo đường dẫn tài nguyên* Đường dẫn tài nguyên @param assetsPath, ý hạn như: "shaders/origin_vert.glsl" */ public static String LoadString(Ngữ cảnh bối cảnh, String assetsPath) { Chuỗi str = ""; thử (InputStream inputStream = context.getAssets().open(assetPath)) { str = LoadString(inputStream } Catch (IOException e) { e.printStackTrace( ); } return str } /** * Đọc chuỗi theo id tài nguyên* @param rawId id tài nguyên, ý hạn như: R.raw.origin_vertex */ public static String LoadString(Context context, int rawId) { String str = ""; ().openRawResource(rawId)) { str = LoadString(inputStream); } Catch (IOException e) { e.printStackTrace( ); } return str; } Chuỗi tĩnh riêng tư tảiString(InputStream inputStream) { StringBuilder sb = new StringBuilder() (BufferedReader br = new BufferedReader(new) inputStreamReader(inputStream))) { Chuỗi dòng; while ((line = br.readLine()) != null) { sb.append(line).append("\n"); } bắt (IOException e) { e.printStackTrace() } return sb. toString();
Tuyên bố: Bài viết này được sao chép từ cú pháp GLSL cơ bản [OpenGL ES].
Cuối cùng, bài viết về cú pháp cơ bản của [OpenGLES] GLSL đã kết thúc tại đây. [OpenGLES] GLSL, vui lòng tìm kiếm bài viết CFSDN hoặc tiếp tục duyệt qua các bài viết liên quan. blog tương lai .
JavaScript sau: function _dom_trackActiveElement(evt) { if (evt && evt.target)
Làm thế nào để nói nếu (A == 0) HOẶC (B == 0) của chúng tôi? Tràn ngăn xếp:
var ret = [] ,xresult = document.evaluate(exp, rootEl, null, X
Tôi đang tìm kiếm một số JavaScript tương tự như ví dụ bên dưới. "SomethingHere" và dấu hai chấm có nghĩa là gì? Tôi đã quen với chức năng myFun
Đây là thủ tục của tôi: dấu phân cách // bỏ thủ tục nếu tồn tại migcontactToActor tạo thủ tục migcontactToActor(;
Tôi đã gặp phải một vấn đề. đã quen với việc đọc cú pháp lắp ráp của Intel. chuyển địa điểm nên tôi đã nhận được
Sự khác biệt giữa cú pháp từ trên xuống và từ dưới lên là gì? Một ví dụ sẽ rất tuyệt vời. Đầu tiên, bản thân pháp luật không phải từ trên xuống hay từ dưới lên, mà là cú pháp phân tích trình tự (mặc định ngữ pháp số có thể được phân tích cú pháp bằng cái này chứ không phải cái kia). là
Tôi biết đây là mã thư thả, nhưng đây là: hộp thoại hiển thị ("Khởi động trình bảo vệ màn hình. Vui lòng nhập: ma trận, cà phê, bánh quế, ngôi sao, wate
Câu hỏi này đã có câu trả lời: Đặt tên cho vòng lặp (6 câu trả lời) Đã đóng 8 năm trước. được sử dụng trong phần mở rộng giống như C# trong Java nhưng gần đây tôi đã tìm thấy ký tự này trong mã của mình
Tôi đang cố gắng viết một hàm để kiểm tra xem một chuỗi có phải là một bảng màu hay không, nhưng tôi nghĩ có một số lỗi khi use the con trỏ string Có gì sai với mã này #include #include #define MAX 1000 int IsPalin
Javascript. bối rối đến mức tôi phải hỏi một câu hỏi khác ở đây: for (Y = 0; $ = 'zx
Giả sử tôi có một hàm chấp nhận các tham số này int create(Ptr * p,void * (*insert)(void *, void *)) { //trả lại thứ sau đó } Kết quả
Câu hỏi này đã có câu trả lời: Toán tử Bitwise '&' (6 câu trả lời) Đã đóng 5 năm trước. Nhưng tôi chưa bao giờ gặp bất cứ điều gì như &, chỉ && if ((code & 1) =
Tôi muốn phát triển một lớp Date và một lớp con date_ISO sẽ đặt ngày, tháng, năm tối đa theo một bộ cụ thể và ghi nó vào một thông tin chuỗi một phương thức. Tôi nghĩ lớp cơ sở Ngày của tôi đang hoạt động tốt
SET @resultsCount = (CHỌN ĐẾM(*) TỪ bảngA);
Ai có thể giải thích "<<" trong mã bên dưới không?
StackOverflow. lịch sử tôi có 12 trạng thái đơn hàng và tôi muốn chọn tổng số từ 5 trạng thái trong số đó. Tôi sẽ sử dụng: SELECT SUM(tot
Nền tảng lập trình của tôi là một chút Java ở trường. JavaScript JavaScript sau đây là một cú pháp mẫu mà tôi không biết cách tạo thành phần: foo.ready = funct
$(function () { window.onload=function
Lịch sử Firefox use textContent nhưng các trình duyệt khác vẫn hỗ trợ thuộc tính InnerText, vui lòng chỉnh sửa lại cho tôi nếu tôi sử dụng thuật toán. sai ngữ. Dù sao thì đến nay
Tôi là một lập trình viên xuất sắc, rất xuất sắc!